mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-24 14:36:13 +01:00
gcontextspecificgroup: Wait until stop_func is done
Currently, the `stop_func` is executed on an extra thread, and the `g_context_specific_group_remove` function returns before the `stop_func` finishes. It may happen that the `stop_func` is never executed if the program terminates soon after calling it. Let's wait until the `stop_func` is done. Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/3258
This commit is contained in:
parent
f1758b10db
commit
bf7d941088
@ -153,18 +153,8 @@ g_context_specific_group_request_state (GContextSpecificGroup *group,
|
||||
}
|
||||
}
|
||||
|
||||
/* we only block for positive transitions */
|
||||
if (requested_state)
|
||||
{
|
||||
while (group->requested_state != group->effective_state)
|
||||
g_cond_wait (&group->cond, &group->lock);
|
||||
|
||||
/* there is no way this could go back to FALSE because the object
|
||||
* that we just created in this thread would have to have been
|
||||
* destroyed again (from this thread) before that could happen.
|
||||
*/
|
||||
g_assert (group->effective_state);
|
||||
}
|
||||
while (group->requested_state != group->effective_state)
|
||||
g_cond_wait (&group->cond, &group->lock);
|
||||
}
|
||||
|
||||
gpointer
|
||||
|
Loading…
Reference in New Issue
Block a user