Subject: bug#9581: 24.0.50; dbus-unregister-object fails if service is nil

From: Julien Danjou <[email-masked]>
Date: Sat, 24 Sep 2011 16:19:41 +0200

On Sat, Sep 24 2011, Michael Albinus wrote:

> I've committed a fix for both problems, could you, please, check?

The patch is not enough. It fixes the precise case I reported, but this
fails now:

(setq db
      (dbus-register-signal :session "some.service"
                            "/org/gtk/Private/RemoteVolumeMonitor"
                            "org.gtk.Private.RemoteVolumeMonitor" "VolumeAdded"
                            'identity))
(dbus-unregister-object db)

Debugger entered--Lisp error: (dbus-error "Match rule has a key with no subsequent '=' character")
  dbus-call-method(:session "org.freedesktop.DBus" "/org/freedesktop/DBus" "org.freedesktop.DBus" "RemoveMatch" "Z")
  dbus-unregister-object(((:session "org.gtk.Private.RemoteVolumeMonitor" "VolumeAdded") ("some.service" "/org/gtk/Private/RemoteVolumeMonitor" identity)))
  eval((dbus-unregister-object db) nil)

And, I've not tested, but AFAICS you added a check "(when service …"
before running ReleaseName. Just not that you must not do a ReleaseName
if you are unregistering a match, and I've the feeling that this code
will do.

> Reading the code, `dbus-registered-objects-table' has become an
> unreadable format. Maybe we shall redesign the format, and move most of
> the functionality from dbusbind.c to dbus.el. But that's something for
> after-the-release.

I totally agree with that. It needs to be reworked. :)

-- 
Julien Danjou