[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs/lisp/net dbus.el
From: |
Michael Albinus |
Subject: |
[Emacs-diffs] emacs/lisp/net dbus.el |
Date: |
Mon, 09 Nov 2009 22:04:57 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Changes by: Michael Albinus <albinus> 09/11/09 22:04:57
Modified files:
lisp/net : dbus.el
Log message:
* net/dbus.el (dbus-unregister-object): Release service, if no
other method is registered for it.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/net/dbus.el?cvsroot=emacs&r1=1.35&r2=1.36
Patches:
Index: dbus.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/net/dbus.el,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- dbus.el 25 Aug 2009 10:13:54 -0000 1.35
+++ dbus.el 9 Nov 2009 22:04:57 -0000 1.36
@@ -139,23 +139,42 @@
;; Find the corresponding entry in the hash table.
(let* ((key (car object))
- (value (gethash key dbus-registered-functions-table)))
+ (value (gethash key dbus-registered-functions-table))
+ (bus (car key))
+ ret)
;; Loop over the registered functions.
- (while (consp value)
- ;; (car value) has the structure (UNAME SERVICE PATH HANDLER).
+ (dolist (val value)
+ ;; val has the structure (UNAME SERVICE PATH HANDLER).
;; (cdr object) has the structure ((SERVICE PATH HANDLER) ...).
- (if (not (equal (cdr (car value)) (car (cdr object))))
- (setq value (cdr value))
+ (when (equal (cdr val) (car (cdr object)))
;; Compute new hash value. If it is empty, remove it from
;; hash table.
(unless
(puthash
key
- (delete (car value) (gethash key dbus-registered-functions-table))
+ (delete val (gethash key dbus-registered-functions-table))
dbus-registered-functions-table)
(remhash key dbus-registered-functions-table))
- (setq value t)))
- value))
+ (setq ret t)))
+ ;; Check, whether there is still a registered function for the
+ ;; given service. If not, unregister the service from the bus.
+ (dolist (val value)
+ (let ((service (cadr val))
+ found)
+ (maphash
+ (lambda (k v)
+ (dolist (val v)
+ (ignore-errors
+ (when (and (equal bus (car k))
+ (string-equal service (cadr val))))
+ (setq found t))))
+ dbus-registered-functions-table)
+ (unless found
+ (dbus-call-method
+ bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
+ "ReleaseName" service))))
+ ;; Return.
+ ret))
(defun dbus-call-method-non-blocking-handler (&rest args)
"Handler for reply messages of asynchronous D-Bus message calls.
- [Emacs-diffs] emacs/lisp/net dbus.el,
Michael Albinus <=