On Wed, 27.08.14 09:47, HATAYAMA, Daisuke (d.hatay...@jp.fujitsu.com) wrote:

> >Sounds like the right option here... I have now added a slightly
> >different patch (1dedb74a2e1d840b531b76b01a76979f3b57456b) that does
> >this.
> >
> 
> Thanks! But this could still hang in very rare case becuase the reset is
> done in a child process after fork(). Please consider the case where the
> child process continue sleeping after fork() before resetting signal
> handlers until it receives SIGTERM. For such reason, my patch resets
> SIGTERM signal handler in the parent systemctl side.

Hmm, there's indeed a race here. I add a commit now that will block all
signals before forking, and unblocks them afterwards. The new process
will hence be created with all signals blocked, and we will hence not
lose them until we after we reset the signal handlers...

Hope this makes sense?

(Blocking the signals temporarily, instead of resetting the signal
handlers has the benefit, that we signal masks are per-thread, and not
per-process, like signal handlers are. The code hence stays generic
enough to not break should the call ever get invoked from a threaded
process...)

Lennart

-- 
Lennart Poettering, Red Hat
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to