[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
interface."
;; 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
(list
nil service path
(cons
(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
`dbus-register-property'."
(cond
;; "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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 1457e84: Fix bug in dbus.el,
Michael Albinus <=