What happens when there are two main-loops in one process?
dvb at flensrocker.de
Mon Apr 15 10:46:36 PDT 2013
Am 15.04.2013 13:52, schrieb Simon McVittie:
> On 14/04/13 20:45, Lars Hanisch wrote:
>> I experience a segfault sometimes [...]
>> dbus/libdbus is version "1.4.18-1ubuntu1.3"
> Thread-safety was broken in libdbus 1.4.x (fixed in 1.6, we think, but
> there might be more bugs). If that's the version you have, it is only
> safe to touch libdbus from one thread (in your case I think that means
> the Avahi thread).
> Even in 1.6, if dbus2vdr and avahi4vdr are fighting over the same
> DBusConnection (because dbus_bus_get() returns a shared instance)
> they'll both be trying to dispatch messages from it. This is unlikely to
> work particularly well.
Ok, good to know.
> If you have to use threads, I would recommend GDBus, part of the GIO
> library, which comes with GLib (the libglib2.0-0 package in Ubuntu). It
> does its D-Bus interactions in yet another thread, and passes each
> message to the correct thread for it to be handled safely (each thread
> that receives messages is expected to be running its own GLib "main
> context"). It's a more elaborate design, but much better for
> applications that are already multi-threaded.
Ok, then I will dig into GDBus and will do my best to learn how to use it.
>> Is this actually "allowed", having too main loops in one process?
> "Sometimes". It depends what libraries you use and how thread-safe they are.
> libdbus is meant to work if you this, but it was never very well-tested,
> and it's known to be broken in 1.4.x (bug 43744). Even with that bug
> fixed, its design - where a single connection is shared between, and
> "dispatched" by, several threads - is just not very helpful in
> situations like this where your application doesn't use D-Bus or a
> particular main loop itself, but its plugins want to. GDBus does this
> much better.
>> What happens, if some other plugin author uses some lib with another dbus main loop?
> Pain, suffering, occasional crashes. GDBus avoids this problem.
>> I haven't worked with glibc (and its main loop) for now,
>> I thought I could come around that... :)
>> Any advice for me?
> glibc (libc.so, the GNU C library) doesn't have a main loop
> implementation. You might be thinking of GLib (libglib-2.0.so, a
> general-purpose utility library originating from GNOME) which has APIs
> called GMainContext and GMainLoop.
Yes, I meant GLib.
Thanks for your reply, I will do my best and will come back later if I need advice. :)
> dbus mailing list
> dbus at lists.freedesktop.org
More information about the dbus