The issue may be that the dbus-glib mainloop source is set to
nonrecursive. This is because historically the thread lock on
DBusConnection was not recursive so you would deadlock if you tried to
dispatch DBusConnection from within an existing dispatch.
I'm not sure whether the main loop source is
You may need to use the idle handler, but keep track of whether
anything happens before the idle handler runs that would affect that
handler...
A possibly-helpful thing is to use g_idle_add_full() to add an "idle"
at default or even high priority. Then the "idle" will be scheduled
round-robin with