summaryrefslogtreecommitdiff
path: root/scheduler/sysman.c
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2008-06-27 20:26:20 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2008-06-27 20:26:20 +0000
commit75bd9771f6e44fdd887ee90faac46f403aefc0fc (patch)
tree354e3067522df9490e905772f73b72bfed8733ae /scheduler/sysman.c
parentdd1abb6b5f145c5e5f279d8848b5f3ec161fd227 (diff)
Merge changes from CUPS 1.4svn-r7696.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@818 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'scheduler/sysman.c')
-rw-r--r--scheduler/sysman.c346
1 files changed, 173 insertions, 173 deletions
diff --git a/scheduler/sysman.c b/scheduler/sysman.c
index b6d175142..cffb285a7 100644
--- a/scheduler/sysman.c
+++ b/scheduler/sysman.c
@@ -1,5 +1,5 @@
/*
- * "$Id: sysman.c 6649 2007-07-11 21:46:42Z mike $"
+ * "$Id: sysman.c 7676 2008-06-18 23:42:37Z mike $"
*
* System management definitions for the Common UNIX Printing System (CUPS).
*
@@ -21,13 +21,13 @@
* doing something.
* cupsdStartSystemMonitor() - Start monitoring for system change.
* cupsdStopSystemMonitor() - Stop monitoring for system change.
- * cupsdUpdateSystemMonitor() - Update the current system state.
* sysEventThreadEntry() - A thread to receive power and computer
* name change notifications.
* sysEventPowerNotifier() - Handle power notification events.
* sysEventConfigurationNotifier() - Computer name changed notification
* callback.
* sysEventTimerNotifier() - Handle delayed event notifications.
+ * sysUpdate() - Update the current system state.
*/
@@ -230,6 +230,7 @@ static void sysEventConfigurationNotifier(SCDynamicStoreRef store,
CFArrayRef changedKeys,
void *context);
static void sysEventTimerNotifier(CFRunLoopTimerRef timer, void *context);
+static void sysUpdate(void);
/*
@@ -249,8 +250,7 @@ cupsdStartSystemMonitor(void)
return;
}
- cupsdAddSelect(SysEventPipes[0], (cupsd_selfunc_t)cupsdUpdateSystemMonitor,
- NULL, NULL);
+ cupsdAddSelect(SysEventPipes[0], (cupsd_selfunc_t)sysUpdate, NULL, NULL);
/*
* Set non-blocking mode on the descriptor we will be receiving notification
@@ -314,174 +314,6 @@ cupsdStopSystemMonitor(void)
/*
- * 'cupsdUpdateSystemMonitor()' - Update the current system state.
- */
-
-void
-cupsdUpdateSystemMonitor(void)
-{
- int i; /* Looping var */
- cupsd_sysevent_t sysevent; /* The system event */
- cupsd_printer_t *p; /* Printer information */
-
-
- /*
- * Drain the event pipe...
- */
-
- while (read((int)SysEventPipes[0], &sysevent, sizeof(sysevent))
- == sizeof(sysevent))
- {
- if (sysevent.event & SYSEVENT_CANSLEEP)
- {
- /*
- * If there are active printers that don't have the connecting-to-device
- * printer-state-reason then cancel the sleep request (i.e. this reason
- * indicates a job that is not yet connected to the printer)...
- */
-
- for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
- p;
- p = (cupsd_printer_t *)cupsArrayNext(Printers))
- {
- if (p->job)
- {
- for (i = 0; i < p->num_reasons; i ++)
- if (!strcmp(p->reasons[i], "connecting-to-device"))
- break;
-
- if (!p->num_reasons || i >= p->num_reasons)
- break;
- }
- }
-
- if (p)
- {
- cupsdLogMessage(CUPSD_LOG_INFO,
- "System sleep canceled because printer %s is active",
- p->name);
- IOCancelPowerChange(sysevent.powerKernelPort,
- sysevent.powerNotificationID);
- }
- else
- {
- cupsdLogMessage(CUPSD_LOG_DEBUG, "System wants to sleep");
- IOAllowPowerChange(sysevent.powerKernelPort,
- sysevent.powerNotificationID);
- }
- }
-
- if (sysevent.event & SYSEVENT_WILLSLEEP)
- {
- cupsdLogMessage(CUPSD_LOG_DEBUG, "System going to sleep");
-
- Sleeping = 1;
-
- cupsdStopAllJobs(0);
-
- for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
- p;
- p = (cupsd_printer_t *)cupsArrayNext(Printers))
- {
- if (p->type & CUPS_PRINTER_DISCOVERED)
- {
- cupsdLogMessage(CUPSD_LOG_DEBUG,
- "Deleting remote destination \"%s\"", p->name);
- cupsArraySave(Printers);
- cupsdDeletePrinter(p, 0);
- cupsArrayRestore(Printers);
- }
- else
- {
- cupsdLogMessage(CUPSD_LOG_DEBUG,
- "Deregistering local printer \"%s\"", p->name);
- cupsdDeregisterPrinter(p, 0);
- }
- }
-
- cupsdCleanDirty();
-
- IOAllowPowerChange(sysevent.powerKernelPort,
- sysevent.powerNotificationID);
- }
-
- if (sysevent.event & SYSEVENT_WOKE)
- {
- cupsdLogMessage(CUPSD_LOG_DEBUG, "System woke from sleep");
- IOAllowPowerChange(sysevent.powerKernelPort,
- sysevent.powerNotificationID);
- Sleeping = 0;
- cupsdCheckJobs();
- }
-
- if (sysevent.event & SYSEVENT_NETCHANGED)
- {
- if (!Sleeping)
- {
- cupsdLogMessage(CUPSD_LOG_DEBUG,
- "System network configuration changed");
-
- /*
- * Resetting browse_time before calling cupsdSendBrowseList causes
- * browse packets to be sent for local shared printers.
- */
-
- for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
- p;
- p = (cupsd_printer_t *)cupsArrayNext(Printers))
- p->browse_time = 0;
-
- cupsdSendBrowseList();
- cupsdRestartPolling();
- }
- else
- cupsdLogMessage(CUPSD_LOG_DEBUG,
- "System network configuration changed; "
- "ignored while sleeping");
- }
-
- if (sysevent.event & SYSEVENT_NAMECHANGED)
- {
- if (!Sleeping)
- {
- cupsdLogMessage(CUPSD_LOG_DEBUG, "Computer name changed");
-
- /*
- * De-register the individual printers...
- */
-
- for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
- p;
- p = (cupsd_printer_t *)cupsArrayNext(Printers))
- cupsdDeregisterPrinter(p, 1);
-
- /*
- * Update the computer name...
- */
-
- cupsdUpdateDNSSDName();
-
- /*
- * Now re-register them...
- */
-
- for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
- p;
- p = (cupsd_printer_t *)cupsArrayNext(Printers))
- {
- p->browse_time = 0;
- cupsdRegisterPrinter(p);
- }
- }
- else
- cupsdLogMessage(CUPSD_LOG_DEBUG,
- "Computer name changed; ignored while sleeping");
- }
- }
-}
-
-
-/*
* 'sysEventThreadEntry()' - A thread to receive power and computer name
* change notifications.
*/
@@ -843,9 +675,177 @@ sysEventTimerNotifier(
threadData->sysevent.event = 0;
}
}
+
+
+/*
+ * 'sysUpdate()' - Update the current system state.
+ */
+
+static void
+sysUpdate(void)
+{
+ int i; /* Looping var */
+ cupsd_sysevent_t sysevent; /* The system event */
+ cupsd_printer_t *p; /* Printer information */
+
+
+ /*
+ * Drain the event pipe...
+ */
+
+ while (read((int)SysEventPipes[0], &sysevent, sizeof(sysevent))
+ == sizeof(sysevent))
+ {
+ if (sysevent.event & SYSEVENT_CANSLEEP)
+ {
+ /*
+ * If there are active printers that don't have the connecting-to-device
+ * printer-state-reason then cancel the sleep request (i.e. this reason
+ * indicates a job that is not yet connected to the printer)...
+ */
+
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
+ p;
+ p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ {
+ if (p->job)
+ {
+ for (i = 0; i < p->num_reasons; i ++)
+ if (!strcmp(p->reasons[i], "connecting-to-device"))
+ break;
+
+ if (!p->num_reasons || i >= p->num_reasons)
+ break;
+ }
+ }
+
+ if (p)
+ {
+ cupsdLogMessage(CUPSD_LOG_INFO,
+ "System sleep canceled because printer %s is active",
+ p->name);
+ IOCancelPowerChange(sysevent.powerKernelPort,
+ sysevent.powerNotificationID);
+ }
+ else
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "System wants to sleep");
+ IOAllowPowerChange(sysevent.powerKernelPort,
+ sysevent.powerNotificationID);
+ }
+ }
+
+ if (sysevent.event & SYSEVENT_WILLSLEEP)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "System going to sleep");
+
+ Sleeping = 1;
+
+ cupsdStopAllJobs(0);
+
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
+ p;
+ p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ {
+ if (p->type & CUPS_PRINTER_DISCOVERED)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "Deleting remote destination \"%s\"", p->name);
+ cupsArraySave(Printers);
+ cupsdDeletePrinter(p, 0);
+ cupsArrayRestore(Printers);
+ }
+ else
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "Deregistering local printer \"%s\"", p->name);
+ cupsdDeregisterPrinter(p, 0);
+ }
+ }
+
+ cupsdCleanDirty();
+
+ IOAllowPowerChange(sysevent.powerKernelPort,
+ sysevent.powerNotificationID);
+ }
+
+ if (sysevent.event & SYSEVENT_WOKE)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "System woke from sleep");
+ IOAllowPowerChange(sysevent.powerKernelPort,
+ sysevent.powerNotificationID);
+ Sleeping = 0;
+ cupsdCheckJobs();
+ }
+
+ if (sysevent.event & SYSEVENT_NETCHANGED)
+ {
+ if (!Sleeping)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "System network configuration changed");
+
+ /*
+ * Resetting browse_time before calling cupsdSendBrowseList causes
+ * browse packets to be sent for local shared printers.
+ */
+
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
+ p;
+ p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ p->browse_time = 0;
+
+ cupsdSendBrowseList();
+ cupsdRestartPolling();
+ }
+ else
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "System network configuration changed; "
+ "ignored while sleeping");
+ }
+
+ if (sysevent.event & SYSEVENT_NAMECHANGED)
+ {
+ if (!Sleeping)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Computer name changed");
+
+ /*
+ * De-register the individual printers...
+ */
+
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
+ p;
+ p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ cupsdDeregisterPrinter(p, 1);
+
+ /*
+ * Update the computer name...
+ */
+
+ cupsdUpdateDNSSDName();
+
+ /*
+ * Now re-register them...
+ */
+
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
+ p;
+ p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ {
+ p->browse_time = 0;
+ cupsdRegisterPrinter(p);
+ }
+ }
+ else
+ cupsdLogMessage(CUPSD_LOG_DEBUG,
+ "Computer name changed; ignored while sleeping");
+ }
+ }
+}
#endif /* __APPLE__ */
/*
- * End of "$Id: sysman.c 6649 2007-07-11 21:46:42Z mike $".
+ * End of "$Id: sysman.c 7676 2008-06-18 23:42:37Z mike $".
*/