1 --- exim-4.69.org/src/daemon.c 2009-06-01 23:02:02.505119117 +0200
2 +++ exim-4.69/src/daemon.c 2009-06-01 23:09:58.088404461 +0200
5 static smtp_slot empty_smtp_slot = { 0, NULL };
8 +static time_t sigalrm_seen_last;
10 /*************************************************
11 * Local static variables *
16 +time(&sigalrm_seen_last);
18 /* Enter the never-ending loop... */
23 DEBUG(D_any) debug_printf("SIGALRM received\n");
25 + time(&sigalrm_seen_last);
27 /* Do a full queue run in a child process, if required, unless we already
28 have enough queue runners on the go. If we are not running as root, a
29 re-exec is required. */
30 @@ -1885,11 +1889,19 @@
36 tv.tv_sec = queue_interval;
38 select(0, NULL, NULL, NULL, &tv);
39 handle_ending_processes();
41 + time_diff = (int)difftime(time(NULL), sigalrm_seen_last);
42 + if ((queue_interval > 0) && (time_diff > (2*queue_interval)))
44 + sigalrm_seen = TRUE;
45 + log_write(0, LOG_MAIN|LOG_PANIC, "daemon: queue-runner not run for %ds. Forcing. Is SIGALRM delivery broken on this system ?", time_diff);
49 /* Re-enable the SIGCHLD handler if it has been run. It can't do it