/*
- * "$Id: main.c 5023 2006-01-29 14:39:44Z mike $"
+ * "$Id: main.c 5042 2006-02-01 18:17:34Z mike $"
*
* Scheduler main loop for the Common UNIX Printing System (CUPS).
*
#ifdef HAVE_NOTIFY_POST
if (LastEvent & CUPSD_EVENT_PRINTER_CHANGED)
{
- cupsdLogMessage(CUPSD_LOG_DEBUG,
+ cupsdLogMessage(CUPSD_LOG_DEBUG2,
"notify_post(\"com.apple.printerListChange\")");
notify_post("com.apple.printerListChange");
}
if (LastEvent & CUPSD_EVENT_PRINTER_STATE_CHANGED)
{
- cupsdLogMessage(CUPSD_LOG_DEBUG,
+ cupsdLogMessage(CUPSD_LOG_DEBUG2,
"notify_post(\"com.apple.printerHistoryChange\")");
notify_post("com.apple.printerHistoryChange");
}
CUPSD_EVENT_JOB_CONFIG_CHANGED |
CUPSD_EVENT_JOB_PROGRESS))
{
- cupsdLogMessage(CUPSD_LOG_DEBUG,
+ cupsdLogMessage(CUPSD_LOG_DEBUG2,
"notify_post(\"com.apple.jobChange\")");
notify_post("com.apple.jobChange");
}
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks)) != NULL)
{
- CFDictionaryAddValue(cupsd_dict, CFSTR("Label"), CFSTR("org.cups.cupsd"));
+ CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_LABEL),
+ CFSTR("org.cups.cupsd"));
CFDictionaryAddValue(cupsd_dict, CFSTR("Enabled"), kCFBooleanTrue);
- CFDictionaryAddValue(cupsd_dict, CFSTR("OnDemand"), kCFBooleanTrue);
+ CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_ONDEMAND),
+ kCFBooleanTrue);
if ((Browsing && BrowseLocalProtocols && cupsArrayCount(Printers)) ||
cupsArrayCount(ActiveJobs))
- CFDictionaryAddValue(cupsd_dict, CFSTR("RunAtLoad"), kCFBooleanTrue);
+ CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_RUNATLOAD),
+ kCFBooleanTrue);
else
- CFDictionaryAddValue(cupsd_dict, CFSTR("RunAtLoad"), kCFBooleanFalse);
+ CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_RUNATLOAD),
+ kCFBooleanFalse);
- CFDictionaryAddValue(cupsd_dict, CFSTR("ServiceIPC"), kCFBooleanTrue);
+ CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_SERVICEIPC),
+ kCFBooleanTrue);
if ((array = CFArrayCreateMutable(kCFAllocatorDefault, 2,
&kCFTypeArrayCallBacks)) != NULL)
{
- CFDictionaryAddValue(cupsd_dict, CFSTR("ProgramArguments"), array);
+ CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_PROGRAMARGUMENTS),
+ array);
CFArrayAppendValue(array, CFSTR("/usr/sbin/cupsd"));
CFArrayAppendValue(array, CFSTR("-l"));
CFRelease(array);
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks)) != NULL)
{
- CFDictionaryAddValue(cupsd_dict, CFSTR("Sockets"), sockets);
+ CFDictionaryAddValue(cupsd_dict, CFSTR(LAUNCH_JOBKEY_SOCKETS), sockets);
/*
* Add a Listeners array to the sockets dictionary...
lis->address.un.sun_path,
kCFStringEncodingUTF8)))
{
- CFDictionaryAddValue(listener, CFSTR("SockPathName"),
+ CFDictionaryAddValue(listener,
+ CFSTR(LAUNCH_JOBSOCKETKEY_PATHNAME),
socket_path);
CFRelease(socket_path);
}
# ifdef AF_INET6
if (lis->address.addr.sa_family == AF_INET6)
{
- CFDictionaryAddValue(listener, CFSTR("SockFamily"),
+ CFDictionaryAddValue(listener,
+ CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
CFSTR("IPv6"));
portnum = lis->address.ipv6.sin6_port;
}
else
# endif /* AF_INET6 */
{
- CFDictionaryAddValue(listener, CFSTR("SockFamily"),
+ CFDictionaryAddValue(listener,
+ CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
CFSTR("IPv4"));
portnum = lis->address.ipv4.sin_port;
}
if (value)
{
- CFDictionaryAddValue(listener, CFSTR("SockServiceName"), value);
+ CFDictionaryAddValue(listener,
+ CFSTR(LAUNCH_JOBSOCKETKEY_SERVICENAME),
+ value);
CFRelease(value);
}
if ((value = CFStringCreateWithCString(kCFAllocatorDefault, temp,
kCFStringEncodingUTF8)))
{
- CFDictionaryAddValue(listener, CFSTR("SockNodeName"), value);
+ CFDictionaryAddValue(listener,
+ CFSTR(LAUNCH_JOBSOCKETKEY_NODENAME),
+ value);
CFRelease(value);
}
}
{
CFArrayAppendValue(array, listener);
- CFDictionaryAddValue(listener, CFSTR("SockFamily"), CFSTR("IPv4"));
- CFDictionaryAddValue(listener, CFSTR("SockType"), CFSTR("dgram"));
+ CFDictionaryAddValue(listener, CFSTR(LAUNCH_JOBSOCKETKEY_FAMILY),
+ CFSTR("IPv4"));
+ CFDictionaryAddValue(listener, CFSTR(LAUNCH_JOBSOCKETKEY_TYPE),
+ CFSTR("dgram"));
if ((service = getservbyport(BrowsePort, NULL)))
value = CFStringCreateWithCString(kCFAllocatorDefault,
value = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType,
&BrowsePort);
- CFDictionaryAddValue(listener, CFSTR("SockServiceName"), value);
+ CFDictionaryAddValue(listener,
+ CFSTR(LAUNCH_JOBSOCKETKEY_SERVICENAME), value);
CFRelease(value);
CFRelease(listener);
int pid; /* Process ID of child */
cupsd_job_t *job; /* Current job */
int i; /* Looping var */
+ char name[1024]; /* Process name */
cupsdLogMessage(CUPSD_LOG_DEBUG2, "process_children()");
if ((pid = wait(&status)) > 0)
#endif /* HAVE_WAITPID */
{
- cupsdLogMessage(CUPSD_LOG_DEBUG2,
- "process_children: pid = %d, status = %d\n", pid, status);
-
/*
* Ignore SIGTERM errors - that comes when a job is cancelled...
*/
+ cupsdFinishProcess(pid, name, sizeof(name));
+
if (status == SIGTERM)
status = 0;
if (status)
{
if (WIFEXITED(status))
- cupsdLogMessage(CUPSD_LOG_ERROR, "PID %d stopped with status %d!", pid,
- WEXITSTATUS(status));
+ cupsdLogMessage(CUPSD_LOG_ERROR, "PID %d (%s) stopped with status %d!",
+ pid, name, WEXITSTATUS(status));
else
- cupsdLogMessage(CUPSD_LOG_ERROR, "PID %d crashed on signal %d!", pid,
- WTERMSIG(status));
+ cupsdLogMessage(CUPSD_LOG_ERROR, "PID %d (%s) crashed on signal %d!",
+ pid, name, WTERMSIG(status));
if (LogLevel < CUPSD_LOG_DEBUG)
cupsdLogMessage(CUPSD_LOG_INFO,
"Hint: Try setting the LogLevel to \"debug\" to find out more.");
}
else
- cupsdLogMessage(CUPSD_LOG_DEBUG2, "PID %d exited with no errors.", pid);
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "PID %d (%s) exited with no errors.",
+ pid, name);
/*
* Delete certificates for CGI processes...
job->status = status; /* Filter failed */
else
job->status = -status; /* Backend failed */
+
+ if (job->printer && !(job->printer->type & CUPS_PRINTER_FAX))
+ {
+ snprintf(job->printer->state_message,
+ sizeof(job->printer->state_message), "%s failed", name);
+ cupsdAddPrinterHistory(job->printer);
+ }
}
/*
/*
- * End of "$Id: main.c 5023 2006-01-29 14:39:44Z mike $".
+ * End of "$Id: main.c 5042 2006-02-01 18:17:34Z mike $".
*/