mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 15:56:23 +01:00
gmain: Add precondition assertions to g_main_context_release()
As with the previous commit. The logic has to be a little contorted here to avoid leaving the context locked after emitting the critical warning. Execution does (and should) continue after a critical warning by default, so we should do our best to recover. Inspired by https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3302. Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
This commit is contained in:
parent
44616ebafd
commit
3926af723a
14
glib/gmain.c
14
glib/gmain.c
@ -3595,6 +3595,20 @@ g_main_context_release (GMainContext *context)
|
||||
|
||||
LOCK_CONTEXT (context);
|
||||
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
if (G_UNLIKELY (context->owner != G_THREAD_SELF || context->owner_count == 0))
|
||||
{
|
||||
GThread *context_owner = context->owner;
|
||||
guint context_owner_count = context->owner_count;
|
||||
|
||||
UNLOCK_CONTEXT (context);
|
||||
|
||||
g_critical ("g_main_context_release() called on a context (%p, owner %p, "
|
||||
"owner count %u) which is not acquired by the current thread",
|
||||
context, context_owner, context_owner_count);
|
||||
}
|
||||
#endif /* !G_DISABLE_CHECKS */
|
||||
|
||||
g_main_context_release_unlocked (context);
|
||||
|
||||
UNLOCK_CONTEXT (context);
|
||||
|
Loading…
Reference in New Issue
Block a user