mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-01 05:13:06 +02: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 */
|
while (group->requested_state != group->effective_state)
|
||||||
if (requested_state)
|
g_cond_wait (&group->cond, &group->lock);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gpointer
|
gpointer
|
||||||
|
Loading…
x
Reference in New Issue
Block a user