dbus and multithreading

Pavel Strashkin pavel.strashkin at gmail.com
Wed Jun 1 09:46:58 PDT 2011


Hi Leonid,

Have you initialized thread support in your application/service before
any dbus calls?

===BEG DOC===
After calling dbus_threads_init(), DBusConnection has thread locks and
drops them when invoking user callbacks, so in general is
transparently threadsafe. However, DBusMessage does NOT have thread
locks; you must not send the same message to multiple DBusConnection
if those connections will be used from different threads, for example.

Also, if you dispatch or pop messages from multiple threads, it may
work in the sense that it won't crash, but it's tough to imagine sane
results; it will be completely unpredictable which messages go to
which threads.

It's recommended to dispatch from a single thread.

The most useful function to call from multiple threads at once is
dbus_connection_send_with_reply_and_block(). That is, multiple threads
can make method calls at the same time.

If you aren't using threads, you can use a main loop and
dbus_pending_call_set_notify() to achieve a similar result
===END DOC===

2011/6/1 Leonid Yurchenko <nocturne at qarea.com>:
> Hi All.
>
> I'm getting problems when using dbus from a worker thread. Problem is pretty
> the same as described in
> http://lists.freedesktop.org/archives/dbus/2009-June/011554.html as 1-st
> problem.
>
> Shortly, it's assertion failure in dbus_pending_call_block.
>
> Mentioned message seems to not have any reply. So question is open for me -
> is dbus glib considered as thread safe? And will these issues be addressed
> any time soon, or we are stuck with one-threaded (gmainloop) approach?
>
> Thanks,
> Leonid.
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
>


More information about the dbus mailing list