Using d-bus from multiple threads?

Ivan Barr itb.wrk at gmail.com
Mon Aug 23 08:39:58 PDT 2010


Hi folks,

I have an application which has two threads. One thread receives requests
and as a result makes d-bus method calls to a server. The other thread is a
glib MainLoop which listens for signals coming in from the server (and may
as a consequent make further d-bus method calls).

Intermittently I am getting mysterious crashes which seem to be coming from
dbus. Sometimes the application can run for a couple of hours before this
happens.

Are there any guidelines to follow when using d-bus from multiple threads? I
feel like I'm working somewhat in the dark!

My latest attempt to fix this is to change the application to use a separate
private connection for each thread by doing this:

conn1 = dbus_g_bus_get_private(DBUS_
BUS_SESSION, NULL, &error);
conn2 = dbus_g_bus_get_private(DBUS_BUS_SESSION, NULL, &error);

Each thread only ever uses proxies created on it's connection.

I am also calling the following (which I presume are required if using the
library from threads):

        g_thread_init(NULL);
        dbus_g_thread_init_default();

The main loop is started as follows:

        main_loop = g_main_loop_new(NULL, TRUE);

Does this seem like a reasonable approach?

It would be great to understand the limitations of using d-bus from
threads... The version of libdbus-glib I'm using is 2.1.0 and libdbus is
3.4.0.

Regards,
Ivan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dbus/attachments/20100823/018cf0ae/attachment-0001.htm>


More information about the dbus mailing list