From ee1600b727b6bab2e20219ed76d8f1c55107d3fb Mon Sep 17 00:00:00 2001 From: Jai Luthra Date: Sat, 22 Aug 2020 13:00:14 +0530 Subject: [PATCH] Add cancel job function. Signed-off-by: Jai Luthra --- filter/rastertopclm.c | 49 +++++++++++++++++++++++++++++++++++++++---- filter/rastertopdf.c | 49 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 90 insertions(+), 8 deletions(-) diff --git a/filter/rastertopclm.c b/filter/rastertopclm.c index e5973f6a1..e5c33eeb8 100644 --- a/filter/rastertopclm.c +++ b/filter/rastertopclm.c @@ -7,7 +7,8 @@ * Include necessary headers... */ -#include "filter.h" +#include +#include /* @@ -17,12 +18,40 @@ static int JobCanceled = 0;/* Set to 1 on SIGTERM */ /* - * 'main()' - Main entry and processing of driver. + * Local functions... */ -int main(int argc, char *argv[]) +static void cancel_job(int sig); + + +/* + * 'main()' - Main entry. + */ + +int /* O - Exit status */ +main(int argc, /* I - Number of command-line args */ + char *argv[]) /* I - Command-line arguments */ { - int ret; + 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 rastertopdf() filter function. @@ -36,3 +65,15 @@ int main(int argc, char *argv[]) return (ret); } + +/* + * 'cancel_job()' - Flag the job as canceled. + */ + +static void +cancel_job(int sig) /* I - Signal number (unused) */ +{ + (void)sig; + + JobCanceled = 1; +} diff --git a/filter/rastertopdf.c b/filter/rastertopdf.c index 65d932b7b..b465e3633 100644 --- a/filter/rastertopdf.c +++ b/filter/rastertopdf.c @@ -7,7 +7,8 @@ * Include necessary headers... */ -#include "filter.h" +#include +#include /* @@ -17,12 +18,40 @@ static int JobCanceled = 0;/* Set to 1 on SIGTERM */ /* - * 'main()' - Main entry and processing of driver. + * Local functions... */ -int main(int argc, char *argv[]) +static void cancel_job(int sig); + + +/* + * 'main()' - Main entry. + */ + +int /* O - Exit status */ +main(int argc, /* I - Number of command-line args */ + char *argv[]) /* I - Command-line arguments */ { - int ret; + 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 rastertopdf() filter function. @@ -36,3 +65,15 @@ int main(int argc, char *argv[]) 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