X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsrc%2Fexim.c;h=5e2f437993b3363a365e8fd800117cfd78d178d3;hb=c85879f8174a658ddac9524d078b2a717f964710;hp=dfd6df76cb364f3de83e3ad59630455826b7f229;hpb=04403ab0b5778126d98d5c9dc8064405688129e0;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/exim.c b/src/src/exim.c index dfd6df76c..5e2f43799 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; } @@ -727,9 +730,13 @@ exit(rc); void -exim_underbar_exit(int rc) +exim_underbar_exit(int rc, const uschar * process) { store_exit(); +DEBUG(D_any) + debug_printf(">>>>>>>>>>>>>>>> Exim pid=%d %s%s%sterminating with rc=%d " + ">>>>>>>>>>>>>>>>\n", (int)getpid(), + process ? "(" : "", process, process ? ") " : "", rc); _exit(rc); } @@ -3138,8 +3145,7 @@ for (i = 1; i < argc; i++) case 'm': case 'o': - if (!*argrest) {} - else badarg = TRUE; + if (*argrest) badarg = TRUE; break; /* -oP : set pid file path for daemon @@ -3157,27 +3163,24 @@ for (i = 1; i < argc; i++) case 'r': case 's': - if (!*argrest) - { - int *tp = (*argrest == 'r')? - &arg_receive_timeout : &arg_smtp_receive_timeout; - if (argrest[1] == 0) - { - if (i+1 < argc) *tp= readconf_readtime(argv[++i], 0, FALSE); - } - else *tp = readconf_readtime(argrest + 1, 0, FALSE); - if (*tp < 0) - exim_fail("exim: bad time value %s: abandoned\n", argv[i]); - } - else badarg = TRUE; + { + int * tp = argrest[-1] == 'r' + ? &arg_receive_timeout : &arg_smtp_receive_timeout; + if (*argrest) + *tp = readconf_readtime(argrest, 0, FALSE); + else if (i+1 < argc) + *tp = readconf_readtime(argv[++i], 0, FALSE); + + if (*tp < 0) + exim_fail("exim: bad time value %s: abandoned\n", argv[i]); + } break; /* -oX : Override local_interfaces and/or default daemon ports */ case 'X': - if (!*argrest) - override_local_interfaces = argv[++i]; - else badarg = TRUE; + if (*argrest) badarg = TRUE; + else override_local_interfaces = argv[++i]; break; /* Unknown -o argument */ @@ -4611,7 +4614,7 @@ if (msg_action_arg > 0 && msg_action != MSG_LOAD) else if ((pid = fork()) == 0) { (void)deliver_message(argv[i], forced_delivery, deliver_give_up); - exim_underbar_exit(EXIT_SUCCESS); + exim_underbar_exit(EXIT_SUCCESS, US"cmdline-delivery"); } else if (pid < 0) { @@ -4631,10 +4634,10 @@ turn into a queue runner, with an optional starting message id. */ if (queue_interval == 0 && !f.daemon_listen) { DEBUG(D_queue_run) debug_printf("Single queue run%s%s%s%s\n", - (start_queue_run_id == NULL)? US"" : US" starting at ", - (start_queue_run_id == NULL)? US"" : start_queue_run_id, - (stop_queue_run_id == NULL)? US"" : US" stopping at ", - (stop_queue_run_id == NULL)? US"" : stop_queue_run_id); + start_queue_run_id ? US" starting at " : US"", + start_queue_run_id ? start_queue_run_id: US"", + stop_queue_run_id ? US" stopping at " : US"", + stop_queue_run_id ? stop_queue_run_id : US""); if (*queue_name) set_process_info("running the '%s' queue (single queue run)", queue_name); else @@ -5714,7 +5717,7 @@ while (more) rc = deliver_message(message_id, FALSE, FALSE); search_tidyup(); exim_underbar_exit(!mua_wrapper || rc == DELIVER_MUA_SUCCEEDED - ? EXIT_SUCCESS : EXIT_FAILURE); + ? EXIT_SUCCESS : EXIT_FAILURE, US"cmdline-delivery"); } if (pid < 0)