mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 15:56:23 +01:00
unix signals: stop using atomics
They are not required here. See the discussion in the bug report. https://bugzilla.gnome.org/show_bug.cgi?id=711090
This commit is contained in:
parent
23ec1b9aca
commit
1867fc210f
15
glib/gmain.c
15
glib/gmain.c
@ -4835,7 +4835,20 @@ dispatch_unix_signals_unlocked (void)
|
||||
* races.
|
||||
*/
|
||||
for (i = 0; i < NSIG; i++)
|
||||
pending[i] = g_atomic_int_compare_and_exchange (&unix_signal_pending[i], TRUE, FALSE);
|
||||
{
|
||||
/* Be very careful with (the volatile) unix_signal_pending.
|
||||
*
|
||||
* We must ensure that it's not possible that we clear it without
|
||||
* handling the signal. We therefore must ensure that our pending
|
||||
* array has a field set (ie: we will do something about the
|
||||
* signal) before we clear the item in unix_signal_pending.
|
||||
*
|
||||
* Note specifically: we must check _our_ array.
|
||||
*/
|
||||
pending[i] = unix_signal_pending[i];
|
||||
if (pending[i])
|
||||
unix_signal_pending[i] = FALSE;
|
||||
}
|
||||
|
||||
/* handle GChildWatchSource instances */
|
||||
if (pending[SIGCHLD])
|
||||
|
Loading…
Reference in New Issue
Block a user