Fast sigblock (AKA rtld speedup)

Jilles Tjoelker jilles at stack.nl
Fri Jan 11 23:29:21 UTC 2013


On Fri, Jan 11, 2013 at 10:49:38PM +0200, Konstantin Belousov wrote:
> http://people.freebsd.org/~kib/misc/rtld-sigblock.3.patch

The new fields td_sigblock_ptr and td_sigblock_val are in the part that
is zeroed for new threads, while the code in rtld appears to expect them
to be copied (on fork, vfork and pthread_create). The fields are
correctly zeroed on exec.

Sharing the magic variable between threads means that one thread holding
an rtld lock will block signals for all other threads as well. This is
different from how the normal signal mask works but I don't know whether
it may break things. However, the patch depends on it in some way
because sigtd() does not know about fast sigblock and will therefore
happily select a thread that is fast-sigblocking to handle a signal
directed at the process.

Although libthr's postpone approach is somewhat ugly, it does not depend
on any non-standard kernel features and does not delay the default
action. Would it be possible to move that code to libc to make things
easier for rtld? It looks like this requires teaching libc about various
threading concepts, though.

Something feels ugly about not allowing applications to use this,
although I don't know how it would work. On the other hand, the strange
signal state created by this and implicit assumptions that the duration
will be short may be a reason to restrict its use to a relatively small
piece of code.

-- 
Jilles Tjoelker


More information about the freebsd-toolchain mailing list