X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/8e9fdd6369f0a7a81f0ca195e24edd372f7ca3ef..4b01271fa595a08e68ba8c58d6404e83623aa9c8:/src/src/exim.c diff --git a/src/src/exim.c b/src/src/exim.c index 6bde8fd96..1c0ea6b6e 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -309,6 +309,7 @@ milliwait(struct itimerval *itval) { sigset_t sigmask; sigset_t old_sigmask; +int save_errno = errno; if (itval->it_value.tv_usec < 50 && itval->it_value.tv_sec == 0) return; @@ -322,6 +323,8 @@ if (setitimer(ITIMER_REAL, itval, NULL) < 0) /* Start timer */ (void)sigdelset(&sigmask, SIGALRM); /* Remove SIGALRM */ (void)sigsuspend(&sigmask); /* Until SIGALRM */ (void)sigprocmask(SIG_SETMASK, &old_sigmask, NULL); /* Restore mask */ +errno = save_errno; +sigalrm_seen = FALSE; } @@ -342,11 +345,9 @@ Returns: nothing void millisleep(int msec) { -struct itimerval itval; -itval.it_interval.tv_sec = 0; -itval.it_interval.tv_usec = 0; -itval.it_value.tv_sec = msec/1000; -itval.it_value.tv_usec = (msec % 1000) * 1000; +struct itimerval itval = {.it_interval = {.tv_sec = 0, .tv_usec = 0}, + .it_value = {.tv_sec = msec/1000, + .tv_usec = (msec % 1000) * 1000}}; milliwait(&itval); } @@ -2759,6 +2760,13 @@ for (i = 1; i < argc; i++) case 'D': smtp_peer_options |= OPTION_DSN; break; + /* -MCd: for debug, set a process-purpose string */ + + case 'd': if (++i < argc) + process_purpose = string_copy_taint(argv[i], TRUE); + else badarg = TRUE; + break; + /* -MCG: set the queue name, to a non-default value */ case 'G': if (++i < argc) queue_name = string_copy(argv[i]); @@ -5694,7 +5702,7 @@ while (more) pid_t pid; search_tidyup(); - if ((pid = exim_fork(US"local-accept delivery")) == 0) + if ((pid = exim_fork(US"local-accept-delivery")) == 0) { int rc; close_unwanted(); /* Close unwanted file descriptors and TLS */