Blob Blame History Raw
From 44606b2e5219d114cfaae2c8fbc48c7fffb2a9c0 Mon Sep 17 00:00:00 2001
From: Ryan Lortie <desrt@desrt.ca>
Date: Mon, 28 Oct 2013 11:44:16 -0700
Subject: [PATCH] GCancellable: drop lock for callback during connect()

Don't hold the lock when calling the user's callback during
g_cancellable_connect() for the case that the cancellable has already
fired.

Taken from a patch by Alex Larsson.

https://bugzilla.gnome.org/show_bug.cgi?id=705395
---
 gio/gcancellable.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gio/gcancellable.c b/gio/gcancellable.c
index fc56b87..2e52141 100644
--- a/gio/gcancellable.c
+++ b/gio/gcancellable.c
@@ -557,6 +557,8 @@ g_cancellable_connect (GCancellable   *cancellable,
       void (*_callback) (GCancellable *cancellable,
                          gpointer      user_data);
 
+      g_mutex_unlock (&cancellable_mutex);
+
       _callback = (void *)callback;
       id = 0;
 
@@ -571,9 +573,10 @@ g_cancellable_connect (GCancellable   *cancellable,
                                   callback, data,
                                   (GClosureNotify) data_destroy_func,
                                   0);
+
+      g_mutex_unlock (&cancellable_mutex);
     }
 
-  g_mutex_unlock (&cancellable_mutex);
 
   return id;
 }
-- 
1.8.3.1