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

From: Julien Danjou <[email-masked]>
Date: Sun, 25 Sep 2011 13:38:21 +0200

On Sat, Sep 24 2011, Michael Albinus wrote:

>> 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)
>
> I've played exactly this example (replacing "some.service" by
> "org.gtk.Private.GduVolumeMonitor" in order to have an existing
> service). No problem.

Indeed. It works fine with org.gtk.Private.GduVolumeMonitor as service,
but with "some.service" it fails. Why?

>> 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")
>
> Where does the "Z" comes from? There will never be such a rule, added by
> AddMatch.

It's not a Z. One of our MUA altered this.
On the first try it's " ^H\330"
On the second try it's "Z^B"
On the third try it's "\300#\264"
…
(I register then unregister to make a try)

> Did you compile also dbusbind.c before testing?

Oh yes I'm sure of that. :)

> Could you apply (dbus-list-hash-table) before calling
> `dbus-unregister-object', and show the result?

Yeah. I start emacs-snapshot, then register then call
`dbus-list-hash-table', it messages:

(((:session "org.freedesktop.Notifications" "ActionInvoked")
  (":1.129"
   "org.freedesktop.Notifications" "/org/freedesktop/Notifications"
   notifications-on-action-signal
   "type='signal',interface='org.freedesktop.Notifications',member='ActionInvoked',sender=':1.129',path='/org/freedesktop/Notifications'"))
 ((:session "org.freedesktop.Notifications" "NotificationClosed")
  (":1.129" "org.freedesktop.Notifications"
   "/org/freedesktop/Notifications" notifications-on-closed-signal
   "type='signal',interface='org.freedesktop.Notifications',member='NotificationClosed',sender=':1.129',path='/org/freedesktop/Notifications'"))
 ((:session "org.gtk.Private.RemoteVolumeMonitor" "VolumeAdded")
  (""
   "some.service" "/org/gtk/Private/RemoteVolumeMonitor" identity
   "")))

In case one of our MUA will change the last string on the last line it
shows:
"^A\202^F^B^D^A"

Then I call unregister it yells:
Debugger entered--Lisp error: (dbus-error "Unable to append argument" "\202")
  dbus-call-method(:session "org.freedesktop.DBus" "/org/freedesktop/DBus" "org.freedesktop.DBus" "RemoveMatch" "\202")

Where the last string is obviously the same as I talked about above. :)

-- 
Julien Danjou