From a2efd46c7752d3508edb6e1733efdcbda7072557 Mon Sep 17 00:00:00 2001 From: Jai Luthra Date: Sat, 22 Aug 2020 13:23:58 +0530 Subject: [PATCH] Added missing cancel_job handler. Signed-off-by: Jai Luthra --- filter/rastertops.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/filter/rastertops.c b/filter/rastertops.c index 90c0bb644..29c3d45f6 100644 --- a/filter/rastertops.c +++ b/filter/rastertops.c @@ -25,6 +25,7 @@ */ #include +#include /* * Local globals... @@ -32,6 +33,14 @@ 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; +} + -- 2.47.2