[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 1457e84: Fix bug in dbus.el

From: Michael Albinus
Subject: master 1457e84: Fix bug in dbus.el
Date: Wed, 2 Sep 2020 13:50:25 -0400 (EDT)

branch: master
commit 1457e84f4468f4a5f2de8c182596225cb1355afa
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>

    Fix bug in dbus.el
    * lisp/net/dbus.el (dbus-register-property)
    (dbus-property-handler): Handle properties of the same interface
    at different object paths properly.  (Bug#43146)
 lisp/net/dbus.el | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el
index fdd726f..971d3e7 100644
--- a/lisp/net/dbus.el
+++ b/lisp/net/dbus.el
@@ -1484,15 +1484,19 @@ clients from discovering the still incomplete 
   ;; Create a hash table entry.  We use nil for the unique name,
   ;; because the property might be accessed from anybody.
-  (let ((key (list :property bus interface property))
-       (val
-        (list
+  (let* ((key (list :property bus interface property))
+         ;; Remove possible existing entry, because it must be overwritten.
+         (val (seq-remove
+               (lambda (item)
+                 (equal (butlast item) (list nil service path)))
+               (gethash key dbus-registered-objects-table)))
+        (entry
           nil service path
            (if emits-signal (list access :emits-signal) (list access))
-           value)))))
-    (puthash key val dbus-registered-objects-table)
+           value))))
+    (puthash key (cons entry val) dbus-registered-objects-table)
     ;; Return the object.
     (list key (list service path))))
@@ -1509,9 +1513,15 @@ It will be registered for all objects created by 
      ;; "Get" returns a variant.
      ((string-equal method "Get")
-      (let ((entry (gethash (list :property bus interface property)
-                           dbus-registered-objects-table)))
-       (when (string-equal path (nth 2 (car entry)))
+      (let ((entry
+             ;; Remove entries not belonging to this case.
+             (seq-remove
+              (lambda (item)
+                (not (string-equal (nth 2 item) path)))
+              (gethash (list :property bus interface property)
+                      dbus-registered-objects-table))))
+        (when (string-equal path (nth 2 (car entry)))
          `((:variant ,(cdar (last (car entry))))))))
      ;; "Set" expects a variant.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]