mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-05 08:56:16 +01:00
Fix a locking problem in g_main_context_iterate()
We failed to ensure that the context is locked on every exit of the function. This fixes bug 583324.
This commit is contained in:
parent
209a662c2f
commit
00151ec0e1
15
glib/gmain.c
15
glib/gmain.c
@ -2382,33 +2382,30 @@ g_main_context_iterate (GMainContext *context,
|
||||
gboolean some_ready;
|
||||
gint nfds, allocated_nfds;
|
||||
GPollFD *fds = NULL;
|
||||
|
||||
|
||||
UNLOCK_CONTEXT (context);
|
||||
|
||||
#ifdef G_THREADS_ENABLED
|
||||
if (!g_main_context_acquire (context))
|
||||
{
|
||||
gboolean got_ownership;
|
||||
|
||||
|
||||
LOCK_CONTEXT (context);
|
||||
|
||||
g_return_val_if_fail (g_thread_supported (), FALSE);
|
||||
|
||||
if (!block)
|
||||
return FALSE;
|
||||
|
||||
LOCK_CONTEXT (context);
|
||||
|
||||
if (!context->cond)
|
||||
context->cond = g_cond_new ();
|
||||
|
||||
|
||||
got_ownership = g_main_context_wait (context,
|
||||
context->cond,
|
||||
g_static_mutex_get_mutex (&context->mutex));
|
||||
|
||||
if (!got_ownership)
|
||||
{
|
||||
UNLOCK_CONTEXT (context);
|
||||
return FALSE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
LOCK_CONTEXT (context);
|
||||
|
Loading…
Reference in New Issue
Block a user