]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Mirror 1.1.x changes.
authormike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Mon, 10 Mar 2003 15:05:54 +0000 (15:05 +0000)
committermike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Mon, 10 Mar 2003 15:05:54 +0000 (15:05 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.2@3437 7a7537e8-13f0-0310-91df-b6672ffda945

scheduler/client.c
scheduler/cupsd.h
scheduler/job.c
scheduler/log.c
scheduler/main.c

index 2ca918703fe1d6853330bd1abc70de6763014b80..2b81ec3a54c8c61b6dfbcc0f66d290e8fd652151 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: client.c,v 1.91.2.45 2003/03/07 19:25:48 mike Exp $"
+ * "$Id: client.c,v 1.91.2.46 2003/03/10 15:05:52 mike Exp $"
  *
  *   Client routines for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -2599,8 +2599,6 @@ pipe_command(client_t *con,               /* I - Client connection */
                root[1024],             /* CUPS_SERVERROOT environment variable */
                query_string[10240];    /* QUERY_STRING env variable */
 #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-  sigset_t     oldmask,                /* POSIX signal masks */
-               newmask;
   struct sigaction action;             /* POSIX signal handler */
 #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
 
@@ -2781,15 +2779,7 @@ pipe_command(client_t *con,              /* I - Client connection */
   * Block signals before forking...
   */
 
-#ifdef HAVE_SIGSET
-  sighold(SIGTERM);
-#elif defined(HAVE_SIGACTION)
-  sigemptyset(&newmask);
-  sigaddset(&newmask, SIGTERM);
-  sigprocmask(SIG_BLOCK, &newmask, &oldmask);
-#endif /* HAVE_SIGSET */
-
-  IgnoreChildSignals();
+  HoldSignals();
 
  /*
   * Then execute the command...
@@ -2857,8 +2847,7 @@ pipe_command(client_t *con,               /* I - Client connection */
 
 #ifdef HAVE_SIGSET
     sigset(SIGTERM, SIG_DFL);
-
-    sigrelse(SIGTERM);
+    sigset(SIGCHLD, SIG_DFL);
 #elif defined(HAVE_SIGACTION)
     memset(&action, 0, sizeof(action));
 
@@ -2866,12 +2855,14 @@ pipe_command(client_t *con,             /* I - Client connection */
     action.sa_handler = SIG_DFL;
 
     sigaction(SIGTERM, &action, NULL);
-
-    sigprocmask(SIG_SETMASK, &oldmask, NULL);
+    sigaction(SIGCHLD, &action, NULL);
 #else
     signal(SIGTERM, SIG_DFL);
+    signal(SIGCHLD, SIG_DFL);
 #endif /* HAVE_SIGSET */
 
+    ReleaseSignals();
+
    /*
     * Execute the pipe program; if an error occurs, exit with status 1...
     */
@@ -2907,13 +2898,7 @@ pipe_command(client_t *con,              /* I - Client connection */
     close(fds[1]);
   }
 
-#ifdef HAVE_SIGSET
-  sigrelse(SIGTERM);
-#elif defined(HAVE_SIGACTION)
-  sigprocmask(SIG_SETMASK, &oldmask, NULL);
-#endif /* HAVE_SIGSET */
-
-  CatchChildSignals();
+  ReleaseSignals();
 
   return (pid);
 }
@@ -2968,5 +2953,5 @@ CDSAWriteFunc(SSLConnectionRef connection,        /* I  - SSL/TLS connection */
 
 
 /*
- * End of "$Id: client.c,v 1.91.2.45 2003/03/07 19:25:48 mike Exp $".
+ * End of "$Id: client.c,v 1.91.2.46 2003/03/10 15:05:52 mike Exp $".
  */
index 4733fc058c6edfcf053347272a07964d857831e5..1519ddc9834a922026f97e6f85c8204205451e0b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cupsd.h,v 1.28.2.15 2003/02/12 19:32:29 mike Exp $"
+ * "$Id: cupsd.h,v 1.28.2.16 2003/03/10 15:05:53 mike Exp $"
  *
  *   Main header file for the Common UNIX Printing System (CUPS) scheduler.
  *
@@ -193,9 +193,11 @@ VAR ipp_t          *Devices        VALUE(NULL),
 
 extern void    CatchChildSignals(void);
 extern void    ClearString(char **s);
+extern void    HoldSignals(void);
 extern void    IgnoreChildSignals(void);
 extern void    LoadDevices(const char *d);
 extern void    LoadPPDs(const char *d);
+extern void    ReleaseSignals(void);
 extern void    SetString(char **s, const char *v);
 extern void    SetStringf(char **s, const char *f, ...);
 extern void    StartServer(void);
@@ -203,5 +205,5 @@ extern void StopServer(void);
 
 
 /*
- * End of "$Id: cupsd.h,v 1.28.2.15 2003/02/12 19:32:29 mike Exp $".
+ * End of "$Id: cupsd.h,v 1.28.2.16 2003/03/10 15:05:53 mike Exp $".
  */
index cfeca2f3ab624de1ecf33824db0be1a76002acff..52992ecc3c7237431105d2102a37a16e3632f023 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: job.c,v 1.124.2.50 2003/03/07 19:25:49 mike Exp $"
+ * "$Id: job.c,v 1.124.2.51 2003/03/10 15:05:53 mike Exp $"
  *
  *   Job management routines for the Common UNIX Printing System (CUPS).
  *
@@ -2482,8 +2482,6 @@ start_process(const char *command,        /* I - Full path to command */
 {
   int  fd;                             /* Looping var */
 #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-  sigset_t             oldmask,        /* POSIX signal masks */
-                       newmask;
   struct sigaction     action;         /* POSIX signal handler */
 #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
 
@@ -2495,15 +2493,7 @@ start_process(const char *command,       /* I - Full path to command */
   * Block signals before forking...
   */
 
-#ifdef HAVE_SIGSET
-  sighold(SIGTERM);
-#elif defined(HAVE_SIGACTION)
-  sigemptyset(&newmask);
-  sigaddset(&newmask, SIGTERM);
-  sigprocmask(SIG_BLOCK, &newmask, &oldmask);
-#endif /* HAVE_SIGSET */
-
-  IgnoreChildSignals();
+  HoldSignals();
 
   if ((*pid = fork()) == 0)
   {
@@ -2580,8 +2570,6 @@ start_process(const char *command,        /* I - Full path to command */
 #ifdef HAVE_SIGSET
     sigset(SIGTERM, SIG_DFL);
     sigset(SIGCHLD, SIG_DFL);
-
-    sigrelse(SIGTERM);
 #elif defined(HAVE_SIGACTION)
     memset(&action, 0, sizeof(action));
 
@@ -2589,12 +2577,14 @@ start_process(const char *command,      /* I - Full path to command */
     action.sa_handler = SIG_DFL;
 
     sigaction(SIGTERM, &action, NULL);
-
-    sigprocmask(SIG_SETMASK, &oldmask, NULL);
+    sigaction(SIGCHLD, &action, NULL);
 #else
     signal(SIGTERM, SIG_DFL);
+    signal(SIGCHLD, SIG_DFL);
 #endif /* HAVE_SIGSET */
 
+    ReleaseSignals();
+
    /*
     * Execute the command; if for some reason this doesn't work,
     * return the error code...
@@ -2617,18 +2607,12 @@ start_process(const char *command,      /* I - Full path to command */
     *pid = 0;
   }
 
-#ifdef HAVE_SIGSET
-  sigrelse(SIGTERM);
-#elif defined(HAVE_SIGACTION)
-  sigprocmask(SIG_SETMASK, &oldmask, NULL);
-#endif /* HAVE_SIGSET */
-
-  CatchChildSignals();
+  ReleaseSignals();
 
   return (*pid);
 }
 
 
 /*
- * End of "$Id: job.c,v 1.124.2.50 2003/03/07 19:25:49 mike Exp $".
+ * End of "$Id: job.c,v 1.124.2.51 2003/03/10 15:05:53 mike Exp $".
  */
index 3beb7e4307a0ad8a44b65debea160fe8a47a4cea..0b975e230b3e2ef8ddf5088600fd8d53d61da5de 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: log.c,v 1.19.2.9 2003/03/04 15:34:57 mike Exp $"
+ * "$Id: log.c,v 1.19.2.10 2003/03/10 15:05:54 mike Exp $"
  *
  *   Log file routines for the Common UNIX Printing System (CUPS).
  *
@@ -153,6 +153,8 @@ LogMessage(int        level,        /* I - Log level */
   if (level > LogLevel)
     return (1);
 
+  HoldSignals();
+
 #ifdef HAVE_VSYSLOG
  /*
   * See if we are logging errors via syslog...
@@ -164,6 +166,8 @@ LogMessage(int        level,        /* I - Log level */
     vsyslog(syslevels[level], message, ap);
     va_end(ap);
 
+    ReleaseSignals();
+
     return (1);
   }
 #endif /* HAVE_VSYSLOG */
@@ -173,8 +177,12 @@ LogMessage(int        level,       /* I - Log level */
   */
 
   if (!check_log_file(&ErrorFile, ErrorLog))
+  {
+    ReleaseSignals();
+
     return (0);
-  
+  }
+
  /*
   * Print the log level and date/time...
   */
@@ -199,6 +207,8 @@ LogMessage(int        level,        /* I - Log level */
 
   fflush(ErrorFile);
 
+  ReleaseSignals();
+
   return (1);
 }
 
@@ -219,6 +229,8 @@ LogPage(job_t       *job,   /* I - Job being printed */
   hostname = ippFindAttribute(job->attrs, "job-originating-host-name",
                               IPP_TAG_ZERO);
 
+  HoldSignals();
+
 #ifdef HAVE_VSYSLOG
  /*
   * See if we are logging pages via syslog...
@@ -231,6 +243,8 @@ LogPage(job_t       *job,   /* I - Job being printed */
            job->id, page, billing ? billing->values[0].string.text : "-",
            hostname->values[0].string.text);
 
+    ReleaseSignals();
+
     return (1);
   }
 #endif /* HAVE_VSYSLOG */
@@ -240,7 +254,11 @@ LogPage(job_t       *job,  /* I - Job being printed */
   */
 
   if (!check_log_file(&PageFile, PageLog))
+  {
+    ReleaseSignals();
+
     return (0);
+  }
 
  /*
   * Print a page log entry of the form:
@@ -256,6 +274,8 @@ LogPage(job_t       *job,   /* I - Job being printed */
           hostname->values[0].string.text);
   fflush(PageFile);
 
+  ReleaseSignals();
+
   return (1);
 }
 
@@ -287,6 +307,8 @@ LogRequest(client_t      *con,      /* I - Request to log */
                };
 
 
+  HoldSignals();
+
 #ifdef HAVE_VSYSLOG
  /*
   * See if we are logging accesses via syslog...
@@ -300,6 +322,8 @@ LogRequest(client_t      *con,      /* I - Request to log */
           con->http.version / 100, con->http.version % 100,
           code, con->bytes);
 
+    ReleaseSignals();
+
     return (1);
   }
 #endif /* HAVE_VSYSLOG */
@@ -309,7 +333,11 @@ LogRequest(client_t      *con,     /* I - Request to log */
   */
 
   if (!check_log_file(&AccessFile, AccessLog))
+  {
+    ReleaseSignals();
+
     return (0);
+  }
 
  /*
   * Write a log of the request in "common log format"...
@@ -322,6 +350,8 @@ LogRequest(client_t      *con,      /* I - Request to log */
          code, con->bytes);
   fflush(AccessFile);
 
+  ReleaseSignals();
+
   return (1);
 }
 
@@ -448,5 +478,5 @@ check_log_file(FILE       **log,    /* IO - Log file */
 
 
 /*
- * End of "$Id: log.c,v 1.19.2.9 2003/03/04 15:34:57 mike Exp $".
+ * End of "$Id: log.c,v 1.19.2.10 2003/03/10 15:05:54 mike Exp $".
  */
index c3522800aae60be7ab2754376d34806e76e4ef70..fc4f4752306258b1361c61e2d5e826f8c0ce7c64 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: main.c,v 1.57.2.35 2003/03/07 19:25:50 mike Exp $"
+ * "$Id: main.c,v 1.57.2.36 2003/03/10 15:05:54 mike Exp $"
  *
  *   Scheduler main loop for the Common UNIX Printing System (CUPS).
  *
@@ -25,7 +25,9 @@
  *
  *   main()               - Main entry for the CUPS scheduler.
  *   CatchChildSignals()  - Catch SIGCHLD signals...
+ *   HoldSignals()        - Hold child and termination signals.
  *   IgnoreChildSignals() - Ignore SIGCHLD signals...
+ *   ReleaseSignals()     - Release signals for delivery.
  *   SetString()          - Set a string value.
  *   SetStringf()         - Set a formatted string value.
  *   sigchld_handler()    - Handle 'child' signals from old processes.
@@ -60,13 +62,22 @@ static void sigusr1_handler(int sig);
 static void    usage(void);
 
 
+/*
+ * Local globals...
+ */
+
+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+static sigset_t        oldmask;                /* Old POSIX signal mask */
+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+
+
 /*
  * 'main()' - Main entry for the CUPS scheduler.
  */
 
-int                            /* O - Exit status */
-main(int  argc,                        /* I - Number of command-line arguments */
-     char *argv[])             /* I - Command-line arguments */
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line arguments */
+     char *argv[])                     /* I - Command-line arguments */
 {
   int                  i;              /* Looping var */
   char                 *opt;           /* Option character */
@@ -688,10 +699,6 @@ CatchChildSignals(void)
 #else
   signal(SIGCLD, sigchld_handler);     /* No, SIGCLD isn't a typo... */
 #endif /* HAVE_SIGSET */
-
-#if defined(HAVE_WAITPID) || defined(HAVE_WAIT3)
-  sigchld_handler(SIGCHLD);
-#endif /* HAVE_WAITPID || HAVE_WAIT3 */
 }
 
 
@@ -710,6 +717,30 @@ ClearString(char **s)                      /* O - String value */
 }
 
 
+/*
+ * 'HoldSignals()' - Hold child and termination signals.
+ */
+
+void
+HoldSignals(void)
+{
+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+  sigset_t             newmask;        /* New POSIX signal mask */
+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+  
+
+#ifdef HAVE_SIGSET
+  sighold(SIGTERM);
+  sighold(SIGCHLD);
+#elif defined(HAVE_SIGACTION)
+  sigemptyset(&newmask);
+  sigaddset(&newmask, SIGTERM);
+  sigaddset(&newmask, SIGCHLD);
+  sigprocmask(SIG_BLOCK, &newmask, &oldmask);
+#endif /* HAVE_SIGSET */
+}
+
+
 /*
  * 'IgnoreChildSignals()' - Ignore SIGCHLD signals...
  *
@@ -724,6 +755,7 @@ IgnoreChildSignals(void)
   struct sigaction     action;         /* Actions for POSIX signals */
 #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
 
+
 #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
   sigset(SIGCHLD, SIG_DFL);
 #elif defined(HAVE_SIGACTION)
@@ -739,6 +771,22 @@ IgnoreChildSignals(void)
 }
 
 
+/*
+ * 'ReleaseSignals()' - Release signals for delivery.
+ */
+
+void
+ReleaseSignals(void)
+{
+#ifdef HAVE_SIGSET
+  sigrelse(SIGTERM);
+  sigrelse(SIGCHLD);
+#elif defined(HAVE_SIGACTION)
+  sigprocmask(SIG_SETMASK, &oldmask, NULL);
+#endif /* HAVE_SIGSET */
+}
+
+
 /*
  * 'SetString()' - Set a string value.
  */
@@ -1030,5 +1078,5 @@ usage(void)
 
 
 /*
- * End of "$Id: main.c,v 1.57.2.35 2003/03/07 19:25:50 mike Exp $".
+ * End of "$Id: main.c,v 1.57.2.36 2003/03/10 15:05:54 mike Exp $".
  */