How to detect DBus dying

David Eriksson twogood at
Thu Sep 29 11:40:31 PDT 2005

On Thu, 2005-09-29 at 19:05 +0100, Tony Houghton wrote:
> I'm trying to update ROX-Session to work with recent versions of DBus
> and I think I found a bug in the glib bindings
> <>, which means I can't
> use dbus_g_proxy_new_for_peer. I'd like to be able to work around the
> problem in ROX-Session so it can be used eg with Ubuntu 5.10 without
> having to replace the dbus packages with a patched version.
> ROX-Session includes, effectively, this bit of code:
>     /* Get notified when the bus dies */
>     local = dbus_g_proxy_new_for_peer(
>             dbus_connection_glib,
>     g_signal_connect(G_OBJECT(local), "destroy",
>             G_CALLBACK(lost_connection), NULL);
> Is there a better way to detect DBus dying or can I just replace the
> call with dbus_g_proxy_new_for_name? If so, what should I use as the
> name?
> If I shouldn't be doing this at all I guess it's OK to remove that code
> altogether, because it considers the condition fatal anyway and all
> lost_connection() does is to clear the application's reference to the
> connection and warn the user to restart the X session.

As this uses my own D-BUS C++ bindings you can regard this as
pseudo-code, but anyway this is how I detect D-BUS 0.23.4 dying:

  if (message->Interface() == "org.freedesktop.Local" &&
      message->Member() == "Disconnected")
    error << "Disconnected from D-BUS!!!" << endlog;
    // This should cause the main loop to exit
    kill(getpid(), SIGTERM);

               -\- David Eriksson -/-

        SynCE -
      ScummVM -
     Desquirr -

More information about the dbus mailing list