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:
Ondrej Holy 2024-02-19 13:38:00 +01:00
parent f1758b10db
commit bf7d941088

View File

@ -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