mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-03 22:52:09 +01:00
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. Doc updates from Colin Walters. https://bugzilla.gnome.org/show_bug.cgi?id=705395
This commit is contained in:
parent
61e8e1cd02
commit
c8aba61713
@ -535,6 +535,11 @@ g_cancellable_cancel (GCancellable *cancellable)
|
|||||||
*
|
*
|
||||||
* See #GCancellable::cancelled for details on how to use this.
|
* See #GCancellable::cancelled for details on how to use this.
|
||||||
*
|
*
|
||||||
|
* Since GLib 2.40, the lock protecting @cancellable is not held when
|
||||||
|
* @callback is invoked. This lifts a restriction in place for
|
||||||
|
* earlier GLib versions which now makes it easier to write cleanup
|
||||||
|
* code that unconditionally invokes e.g. g_cancellable_cancel().
|
||||||
|
*
|
||||||
* Returns: The id of the signal handler or 0 if @cancellable has already
|
* Returns: The id of the signal handler or 0 if @cancellable has already
|
||||||
* been cancelled.
|
* been cancelled.
|
||||||
*
|
*
|
||||||
@ -557,6 +562,8 @@ g_cancellable_connect (GCancellable *cancellable,
|
|||||||
void (*_callback) (GCancellable *cancellable,
|
void (*_callback) (GCancellable *cancellable,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
g_mutex_unlock (&cancellable_mutex);
|
||||||
|
|
||||||
_callback = (void *)callback;
|
_callback = (void *)callback;
|
||||||
id = 0;
|
id = 0;
|
||||||
|
|
||||||
@ -571,9 +578,10 @@ g_cancellable_connect (GCancellable *cancellable,
|
|||||||
callback, data,
|
callback, data,
|
||||||
(GClosureNotify) data_destroy_func,
|
(GClosureNotify) data_destroy_func,
|
||||||
0);
|
0);
|
||||||
}
|
|
||||||
|
|
||||||
g_mutex_unlock (&cancellable_mutex);
|
g_mutex_unlock (&cancellable_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user