From: Benjamin Otte Date: Tue, 9 Jun 2009 08:54:22 +0000 (+0200) Subject: Bug 585189 – g_cancellable_reset() must be called in same thread ... X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=ced88fd0de4aedb537552561582875b427081eeb;p=dana%2Fcg-glib.git Bug 585189 – g_cancellable_reset() must be called in same thread ... ... as g_cancellable_cancel() Rework a g_critical() that would (rarely) trigger when _reset() was called in a thread different from _cancel() by making _reset() wait for the cancel function to be finished the same way g_cancellable_disconnect() uses. --- diff --git a/gio/gcancellable.c b/gio/gcancellable.c index e54d6c89..19326b50 100644 --- a/gio/gcancellable.c +++ b/gio/gcancellable.c @@ -327,11 +327,11 @@ g_cancellable_reset (GCancellable *cancellable) G_LOCK(cancellable); - if (cancellable->cancelled_running) + while (cancellable->cancelled_running) { - g_critical ("Can't reset a cancellable during an active operation"); - G_UNLOCK(cancellable); - return; + cancellable->cancelled_running_waiting = TRUE; + g_cond_wait (cancellable_cond, + g_static_mutex_get_mutex (& G_LOCK_NAME (cancellable))); } if (cancellable->cancelled)