]> git.eshelyaron.com Git - emacs.git/commitdiff
Do not unregister a D-Bus service which is a unique name
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 24 Nov 2023 10:09:15 +0000 (11:09 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 24 Nov 2023 10:09:15 +0000 (11:09 +0100)
* lisp/net/dbus.el (dbus-unregister-service): Check, whether
SERVICE is a known name.  (Bug#67386)

lisp/net/dbus.el

index f35d11db152fe90692bb3d074ec51d9d4a7ee64f..95f92cf77868ce260d9af8b820eea33bb18099c6 100644 (file)
@@ -682,7 +682,9 @@ operation.  One of the following keywords is returned:
 `:non-existent': Service name does not exist on this bus.
 
 `:not-owner': We are neither the primary owner nor waiting in the
-queue of this service."
+queue of this service.
+
+When SERVICE is not a known name but a unique name, the function returns nil."
 
   (maphash
    (lambda (key value)
@@ -694,14 +696,17 @@ queue of this service."
                 (puthash key (delete elt value) dbus-registered-objects-table)
               (remhash key dbus-registered-objects-table)))))))
    dbus-registered-objects-table)
-  (let ((reply (dbus-call-method
-               bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
-               "ReleaseName" service)))
-    (pcase reply
-      (1 :released)
-      (2 :non-existent)
-      (3 :not-owner)
-      (_ (signal 'dbus-error (list "Could not unregister service" service))))))
+
+  (unless (string-prefix-p ":" service)
+    (let ((reply (dbus-call-method
+                 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
+                 "ReleaseName" service)))
+      (pcase reply
+        (1 :released)
+        (2 :non-existent)
+        (3 :not-owner)
+        (_ (signal
+            'dbus-error (list "Could not unregister service" service)))))))
 
 (defun dbus-register-signal
   (bus service path interface signal handler &rest args)