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:
Philip Withnall 2023-03-06 15:44:26 +00:00
parent 44616ebafd
commit 3926af723a

View File

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