From 83bb468e0d4b386d88821ba2981f981214e9ebc6 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Tue, 4 Jun 2013 12:40:45 +0100 Subject: Initialize libdbus for thread-safety libdbus is not thread-safe by default. This is a long-standing design flaw (). We call into GIO, which calls into glib-networking, which can (at least in recent versions) invoke libproxy in a thread. libproxy apparently has a Network-Manager plugin, which uses libdbus in that thread; meanwhile, we use libdbus in the main thread and everything goes badly for us. (It's possible that this crash is only reproducible with broken connectivity: I wrote this patch on a train, with intermittent mobile broadband coverage.) In libdbus < 1.7.4, libraries cannot safely initialize libdbus for multi-threading, because that initialization is not itself thread-safe (!); in particular, glib-networking cannot safely initialize libdbus. So, we have to do it. I have written patches to make libdbus thread-safe-by-default, but they haven't all been reviewed and merged yet, and in any case they won't be in a stable libdbus until 1.8. Until then, each application has to discover and fix this bug individually. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=65296 Reviewed-by: Xavier Claessens --- src/gabble.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gabble.c b/src/gabble.c index 0d2fb6e29..31ca34201 100644 --- a/src/gabble.c +++ b/src/gabble.c @@ -25,6 +25,8 @@ # include #endif +#include + #include #include @@ -116,6 +118,9 @@ gabble_init (void) g_thread_init (NULL); #endif + if (!dbus_threads_init_default ()) + g_error ("Unable to initialize libdbus thread-safety (out of memory?)"); + g_type_init (); wocky_init (); } -- cgit v1.2.1