dbus-glib, GLib and threads

Alberto Mardegan mardy at users.sourceforge.net
Wed Jul 25 22:49:24 PDT 2012


Hi!
  I've got one library which seems to produce random crashes when used
in a multithreaded application. We are not sure yet that the problem is
in that library, but it is the most likely candidate.

The library is written using dbus-glib, and creates one DBusGProxy
object which is used to make all of its D-Bus calls. This object is a
global singleton, therefore it's shared and used by all threads. You can
see the code here:
http://code.google.com/p/accounts-sso/source/browse/libsignon-glib/signon-proxy.c?repo=libsignon-glib

Could the crashes be indirectly caused by
https://bugs.freedesktop.org/show_bug.cgi?id=857 ?


Any suggestions on how to solve this? The long term plan is to use
GDBus, but it won't happen overnight. Does the following sound like a
solution:

1) Don't use a global singleton: call g_thread_self() in the SignonProxy
constructor to create a singleton object per each thread.
2) Call dbus_g_bus_get_private(), not dbus_g_bus_get()

Or would (2) alone be enough?


TIA,
  Alberto

-- 
http://blog.mardy.it <- geek in un lingua international!


More information about the dbus mailing list