On 07/07/2010 03:55 AM, Steven McCoy wrote: > On 7 July 2010 15:03, Martin Lucina <[email protected] > <mailto:[email protected]>> wrote: > > I don't have the code handy right now, look for the call to > pthread_sigmask(). The signal mask is cleared for all 0MQ I/O threads, > so they will not get any signals (excepting SIGSEGV, etc.) > > > #if !defined ZMQ_HAVE_OPENVMS > // Following code will guarantee more predictable latecnies as it'll > // disallow any signal handling in the I/O thread. > sigset_t signal_set; > int rc = sigfillset (&signal_set); > errno_assert (rc == 0); > rc = pthread_sigmask (SIG_BLOCK, &signal_set, NULL); > errno_assert (rc == 0); > #endif > > So the I/O threads which are created by ZeroMQ explicitly ignore all > signals but SIGKILL and SIGSTOP. In this case ignore means that the > default action is not taken. > > http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_sigmask.3.html > http://www.kernel.org/doc/man-pages/online/pages/man2/sigprocmask.2.html > > With the default actions listed in signal(7), i.e. term on most defined > signals, or stops the actions defined by the calling thread being inherited. > > http://www.kernel.org/doc/man-pages/online/pages/man2/sigprocmask.2.html
I think the wording here is confusing, but the conclusion is correct. Here's my attempt to clarify: ZeroMQ does not ignore signals, it sets its threads to block them. This means that any signal which is caused by the thread will be: 1) set as *pending* for the thread, if it is a thread-directed signal 2) sent to another thread in the process, if it is a process-directed signal Like Martin is getting at, getting SIGPIPE from send() is a thread-directed signal so (1) will happen; that's also what I think from looking at Open Group Base Specifications 2.10.14 (http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_10.html#tag_02_10_14). So I agree that the patch shouldn't be necessary unless some OSes don't follow posix. As an aside, the SIGPIPE is simply set to pending, not ignored; if the ZeroMQ thread ever restores the sigmask to unblocked, the process will be killed. _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
