]> git.ipfire.org Git - thirdparty/cups-filters.git/commitdiff
Added missing cancel_job handler. 290/head
authorJai Luthra <luthrajaiji@gmail.com>
Sat, 22 Aug 2020 07:53:58 +0000 (13:23 +0530)
committerJai Luthra <luthrajaiji@gmail.com>
Sat, 22 Aug 2020 07:53:58 +0000 (13:23 +0530)
Signed-off-by: Jai Luthra <luthrajaiji@gmail.com>
filter/rastertops.c

index 90c0bb644abef69e618774aa1d78f580e3dd85f3..29c3d45f6e52c464cbdcfecf7cc4998fe6541c86 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include <cupsfilters/filter.h>
+#include <signal.h>
 
 /*
  * Local globals...
 
 static int             JobCanceled = 0;/* Set to 1 on SIGTERM */
 
+
+/*
+ * Local functions...
+ */
+
+static void            cancel_job(int sig);
+
+
 /*
  * 'main()' - Main entry and processing of driver.
  */
@@ -41,8 +50,27 @@ main(int  argc,         /* I - Number of command-line arguments */
      char *argv[]) /* I - Command-line arguments */
 {
   int           ret;
+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
+  struct sigaction action;             /* Actions for POSIX signals */
+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
+
+ /*
+  * Register a signal handler to cleanly cancel a job.
+  */
+
+#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
+  sigset(SIGTERM, cancel_job);
+#elif defined(HAVE_SIGACTION)
+  memset(&action, 0, sizeof(action));
+
+  sigemptyset(&action.sa_mask);
+  action.sa_handler = cancel_job;
+  sigaction(SIGTERM, &action, NULL);
+#else
+  signal(SIGTERM, cancel_job);
+#endif /* HAVE_SIGSET */
 
 /*
+ /*
   * Fire up the rastertops() filter function
   */
 
@@ -53,3 +81,17 @@ main(int  argc,         /* I - Number of command-line arguments */
 
   return (ret);
 }
+
+
+/*
+ * 'cancel_job()' - Flag the job as canceled.
+ */
+
+static void
+cancel_job(int sig)                    /* I - Signal number (unused) */
+{
+  (void)sig;
+
+  JobCanceled = 1;
+}
+