[glib] gdbus: Initialize types earlier to break proxy <-> connection deadlock
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] gdbus: Initialize types earlier to break proxy <-> connection deadlock
- Date: Mon, 27 Mar 2017 13:43:43 +0000 (UTC)
commit 5b4b827e9940d724580101546c601c2e3c77ff82
Author: Colin Walters <walters verbum org>
Date: Fri Nov 18 16:26:58 2016 -0500
gdbus: Initialize types earlier to break proxy <-> connection deadlock
This will help us break generic GType deadlocks between people using
GDBus in different threads (which is supported), not just by GType
usage in the GDBus thread.
This should fix the common cases we're seeing in the wild, although I
have some lingering concerns that if someone e.g. referenced
e.g. `G_TYPE_DBUS_AUTH_MECHANISM_SHA1` etc. we'd need to add those
too.
https://bugzilla.gnome.org/show_bug.cgi?id=674885
gio/gdbusprivate.c | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
---
diff --git a/gio/gdbusprivate.c b/gio/gdbusprivate.c
index ea05dcd..eeb12d9 100644
--- a/gio/gdbusprivate.c
+++ b/gio/gdbusprivate.c
@@ -202,7 +202,8 @@ _g_socket_read_with_control_messages_finish (GSocket *socket,
/* ---------------------------------------------------------------------------------------------------- */
-/* Work-around for https://bugzilla.gnome.org/show_bug.cgi?id=627724 */
+/* Work-around for https://bugzilla.gnome.org/show_bug.cgi?id=674885
+ and see also the original https://bugzilla.gnome.org/show_bug.cgi?id=627724 */
static GPtrArray *ensured_classes = NULL;
@@ -227,6 +228,8 @@ ensure_required_types (void)
ensured_classes = g_ptr_array_new ();
ensure_type (G_TYPE_TASK);
ensure_type (G_TYPE_MEMORY_INPUT_STREAM);
+ ensure_type (G_TYPE_DBUS_CONNECTION);
+ ensure_type (G_TYPE_DBUS_PROXY);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -264,9 +267,6 @@ _g_dbus_shared_thread_ref (void)
{
SharedThreadData *data;
- /* Work-around for https://bugzilla.gnome.org/show_bug.cgi?id=627724 */
- ensure_required_types ();
-
data = g_new0 (SharedThreadData, 1);
data->refcount = 0;
@@ -1921,6 +1921,9 @@ _g_dbus_initialize (void)
_gdbus_debug_flags |= G_DBUS_DEBUG_MESSAGE;
}
+ /* Work-around for https://bugzilla.gnome.org/show_bug.cgi?id=627724 */
+ ensure_required_types ();
+
g_once_init_leave (&initialized, 1);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]