Logging in signal handler can cause deadlock if signal arrives while
the process is already logging.
{
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;
}
{
traceQueue(job, "PREPARE START");
abortPrepare = false;
+ abortSignal = 0;
pid_t pid = fork();
switch (pid) {
case 0: // child, do work
updateQFile = true;
}
}
+ if (abortPrepare)
+ logError("CAUGHT SIGNAL %d, ABORT JOB PREPARATION", abortSignal);
if (updateQFile)
updateRequest(req, job);
return (status);
// 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