Some code using GLib (gnome-keyring-daemon, for example) assumes that
they can catch signals by masking them out in the main thread and
calling sigwait() from a worker.
The problem is that our new worker thread catches the signals before
sigwait() has a chance and the default action occurs (typically
resulting in program termination).
If we mask all the signals in our worker, then this can't happen.
+<!-- ##### MACRO G_DEPRECATED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO G_DEPRECATED_FOR ##### -->
+<para>
+
+</para>
+
+@f:
+
+
<!-- ##### MACRO G_LIKELY ##### -->
<para>
Hints the compiler that the expression is likely to evaluate to a true
if (g_once_init_enter (&initialised))
{
+ /* mask all signals in the worker thread */
+#ifdef G_OS_UNIX
+ sigset_t prev_mask;
+ sigset_t all;
+
+ sigfillset (&all);
+ pthread_sigmask (SIG_SETMASK, &all, &prev_mask);
+#endif
glib_worker_context = g_main_context_new ();
g_thread_new ("gmain", glib_worker_main, NULL);
+#ifdef G_OS_UNIX
+ pthread_sigmask (SIG_SETMASK, &prev_mask, NULL);
+#endif
g_once_init_leave (&initialised, TRUE);
}