glib-unix: fix handling of multiple signal source for the same signal
authorGiovanni Campagna <gcampagn@redhat.com>
Tue, 16 Jul 2013 13:26:02 +0000 (15:26 +0200)
committerGiovanni Campagna <gcampagn@redhat.com>
Fri, 19 Jul 2013 07:34:47 +0000 (09:34 +0200)
commitbe2c7b83c4a9c9d3aa76b1499c27ab19e0f4e470
treee579ef4ba5bbcb6cbd8898e089841759bf2789d7
parent72a7e824d65b725a5f64224ee274fe5e3d7933fc
glib-unix: fix handling of multiple signal source for the same signal

We can't reset the pending flag for a signal until we've traversed
the whole list, as the documentation clearly says that in case multiple
sources they all get invoked.
This is still racy if you get a signal after checking the flag
but before resetting it, but it was the same before. The correct
fix would be to use sigwait() or signalfd(), but that would mean
blocking all signals in all threads, which is not compatible
with existing applications.

https://bugzilla.gnome.org/show_bug.cgi?id=704322
glib/gmain.c
glib/tests/unix.c