From: Patrice Fournier Date: Mon, 11 Jan 2016 04:25:36 +0000 (-0500) Subject: Don't log in faxq signal handler X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0aba4eb78595d95c2a92e48896e6fe59ea86de12;p=thirdparty%2FHylaFAX.git Don't log in faxq signal handler Logging in signal handler can cause deadlock if signal arrives while the process is already logging. --- diff --git a/faxd/faxQueueApp.c++ b/faxd/faxQueueApp.c++ index 4edc8a2b..e72d8d73 100644 --- a/faxd/faxQueueApp.c++ +++ b/faxd/faxQueueApp.c++ @@ -423,7 +423,7 @@ faxQueueApp::prepareCleanup(int s) { int old_errno = errno; signal(s, fxSIGHANDLER(faxQueueApp::prepareCleanup)); - logError("CAUGHT SIGNAL %d, ABORT JOB PREPARATION", s); + faxQueueApp::instance().abortSignal = s; faxQueueApp::instance().abortPrepare = true; errno = old_errno; } @@ -442,6 +442,7 @@ faxQueueApp::prepareStart(Batch& batch, Job& job, FaxRequest* req) { traceQueue(job, "PREPARE START"); abortPrepare = false; + abortSignal = 0; pid_t pid = fork(); switch (pid) { case 0: // child, do work @@ -797,6 +798,8 @@ faxQueueApp::prepareJob(Job& job, FaxRequest& req, updateQFile = true; } } + if (abortPrepare) + logError("CAUGHT SIGNAL %d, ABORT JOB PREPARATION", abortSignal); if (updateQFile) updateRequest(req, job); return (status); diff --git a/faxd/faxQueueApp.h b/faxd/faxQueueApp.h index b9888c3b..b86cb702 100644 --- a/faxd/faxQueueApp.h +++ b/faxd/faxQueueApp.h @@ -134,6 +134,7 @@ private: // runtime state bool timeout; // timeout occurred bool abortPrepare; // job preparation should be aborted + int abortSignal; // signal used to abort job preparation bool quit; // terminate server int fifo; // fifo job queue interface QLink runq; // list of DestInfo ready to run