If no main loop is running, then the dbus connection's incoming message
queue was never emptied, so with, eg, dogtail,
dbus_connection_send_with_reply_and_block would take longer and longer
to look through the message queue to find a reply. This also effectively
led to a memory leak.
https://bugzilla.gnome.org/show_bug.cgi?id=701145
message,
-1,
&error);
+ if (g_main_depth () == 0)
+ while (dbus_connection_dispatch (session_bus) == DBUS_DISPATCH_DATA_REMAINS);
dbus_message_unref (message);
if (!reply)
if (unique_name && destination &&
strcmp (destination, unique_name) != 0)
- return dbus_connection_send_with_reply_and_block (bus, message, dbind_timeout, error);
+ {
+ ret = dbus_connection_send_with_reply_and_block (bus, message,
+ dbind_timeout, error);
+ if (g_main_depth () == 0)
+ while (dbus_connection_dispatch (bus) == DBUS_DISPATCH_DATA_REMAINS);
+ return ret;
+ }
closure = g_new0 (SpiReentrantCallClosure, 1);
closure->reply = NULL;