On Nov 20 02:14, Takashi Yano wrote: > On Fri, 19 Nov 2021 16:53:57 +0100 > Corinna Vinschen wrote: > > On Nov 19 16:51, Corinna Vinschen wrote: > > > Isn't that already handled in wait_sig? What's the difference here? > > > > ...and where exactly is it waiting 60 secs? > > If sending signal to myself with exit_state > ES_EXIT_STARGING, > wait_for_completion in sig_send() is set to true. Therefore, > sig_send() waits for pack.wakeup event for WSSC (60000 msec) here: > > /* No need to wait for signal completion unless this was a signal to > this process. > > If it was a signal to this process, wait for a dispatched signal. > Otherwise just wait for the wait_sig to signal that it has finished > processing the signal. */ > if (wait_for_completion) > { > sigproc_printf ("Waiting for pack.wakeup %p", pack.wakeup); > rc = WaitForSingleObject (pack.wakeup, WSSC); > ForceCloseHandle (pack.wakeup); > } > > However, thread wait_sig ignores the signal here: > /* Don't process signals when we start exiting */ > if (exit_state > ES_EXIT_STARTING && pack.si.si_signo > 0) > continue; > and does not call SetEvent (pack.wakeup). > > As a result, sig_send() hangs for 60 secs. > > With this patch, sig_send() does not send signal which will > be ignored in wait_sig().
Ah, ok, that makes sense. Thanks for the explanation. Please push. Thanks, Corinna