Package: libgconf2-4
Version: 3.2.5-0ubuntu4
Severity: critical
Tags: patch
Justification: breaks unrelated software

Dear Maintainer,

Originally from https://bugs.launchpad.net/ubuntu/+source/banshee/+bug/1048341,

Banshee, which uses libgconf through the gconf# bindings, and does not touch
libdbus-glib directly (dbus# is a reimplementation of libdbus, and does not
actually use libdbus(-glib)), is crashing in libgconf with the following stack
trace:

#0  0x00007f609b5cc18d in read () at ../sysdeps/unix/syscall-template.S:82
#1  0x000000000049853b in read (__nbytes=1024, __buf=0x7f607a4e4730, 
__fd=<optimized out>) at /usr/include/x86_64-linux-gnu/bits/unistd.h:45
#2  mono_handle_native_sigsegv (signal=signal@entry=11, 
ctx=ctx@entry=0x7f607a4e4c40) at mini-exceptions.c:2208
#3  0x00000000004e8daf in mono_arch_handle_altstack_exception 
(sigctx=sigctx@entry=0x7f607a4e4c40, fault_addr=<optimized out>, 
stack_ovf=stack_ovf@entry=0) at exceptions-amd64.c:953
#4  0x000000000041fe87 in mono_sigsegv_signal_handler (_dummy=11, 
info=0x7f607a4e4d70, context=0x7f607a4e4c40) at mini.c:5909
#5  <signal handler called>
#6  0x00007f608c9b7a57 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#7  0x00007f608c9bc011 in dbus_message_get_reply_serial () from 
/lib/x86_64-linux-gnu/libdbus-1.so.3
#8  0x00007f608c9b037e in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#9  0x00007f608c9c7e5b in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#10 0x00007f608c9c8864 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#11 0x00007f608c9c8ec6 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#12 0x00007f608c9c7bfd in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#13 0x00007f608c9b2904 in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#14 0x00007f608c9b3cad in ?? () from /lib/x86_64-linux-gnu/libdbus-1.so.3
[1 Debug 17:34:10.781]#15 0x00007f608c9b30ac in 
dbus_connection_send_with_reply_and_block () from 
/lib/x86_64-linux-gnu/libdbus-1.so.3
#16 0x00007f608ce3028a in gconf_engine_get_fuller () from 
/usr/lib/x86_64-linux-gnu/libgconf-2.so.4
#17 0x00007f608ce305be in gconf_engine_get_entry () from 
/usr/lib/x86_64-linux-gnu/libgconf-2.so.4
#18 0x00007f608ce2a86e in ?? () from /usr/lib/x86_64-linux-gnu/libgconf-2.so.4
#19 0x00007f608ce2cf8d in ?? () from /usr/lib/x86_64-linux-gnu/libgconf-2.so.4


I would like to propose the patch that I have applied onto the the Ubuntu gconf
package (attached here) in order to fix this issue. It ensures that libgconf
initializes DBus-Glib with threads when it is initialized.

-- System Information:
Debian Release: wheezy/sid
  APT prefers quantal-updates
  APT policy: (500, 'quantal-updates'), (500, 'quantal-security'), (500, 
'quantal'), (400, 'quantal-proposed'), (100, 'quantal-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.6.6-hyper1 (SMP w/4 CPU cores; PREEMPT)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libgconf2-4 depends on:
ii  gconf-service  3.2.5-0ubuntu4
ii  libgconf-2-4   3.2.5-0ubuntu4

libgconf2-4 recommends no packages.

libgconf2-4 suggests no packages.

-- no debconf information
Author: Chow Loong Jin <hyper...@debian.org>
Description: Call dbus_g_thread_init before calling any dbus functions
Bug-Ubuntu: https://bugs.launchpad.net/bugs/1048341
Index: gconf/gconf/gconf-dbus.c
===================================================================
--- gconf.orig/gconf/gconf-dbus.c	2012-09-11 09:54:10.056848441 +0800
+++ gconf/gconf/gconf-dbus.c	2012-09-11 10:07:03.967826677 +0800
@@ -396,6 +396,13 @@
       return FALSE;
     }
 
+  /* Initialize DBus Glib for multithreading -- this fixes race conditions when
+     multi-threaded applications use gconf. Additionally, although the API
+     documentation says that dbus_g_thread_init() may only be called once, it is
+     actually really a wrapper for dbus_threads_init_default() which can be
+     called as many times as necessary. */
+  dbus_g_thread_init ();
+
   dbus_error_init (&error);
 
   global_conn = dbus_bus_get_private (DBUS_BUS_SESSION, &error);

Reply via email to