summaryrefslogtreecommitdiff
path: root/lisp/net/zeroconf.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/net/zeroconf.el')
-rw-r--r--lisp/net/zeroconf.el35
1 files changed, 21 insertions, 14 deletions
diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el
index 351fc9fc305..25a8dea4316 100644
--- a/lisp/net/zeroconf.el
+++ b/lisp/net/zeroconf.el
@@ -382,6 +382,8 @@ TYPE. The resulting list has the format
;; `zeroconf-services-hash'.
(gethash (concat name "/" type) zeroconf-services-hash nil))
+(defvar dbus-debug)
+
(defun zeroconf-resolve-service (service)
"Return all service attributes SERVICE as list.
NAME must be a string. The service must be of service type
@@ -526,22 +528,27 @@ DOMAIN is nil, the local domain is used."
zeroconf-avahi-current-domain
zeroconf-avahi-flags-unspec))))
+(defvar zeroconf-service-type-browser-handler-running nil
+ "Prevent infinite recursion in `zeroconf-service-type-browser-handler'.")
+
(defun zeroconf-service-type-browser-handler (&rest val)
"Registered service type browser handler at the Avahi daemon."
- (when zeroconf-debug
- (message "zeroconf-service-type-browser-handler: %s %S"
- (dbus-event-member-name last-input-event) val))
- (cond
- ((string-equal (dbus-event-member-name last-input-event) "ItemNew")
- ;; Parameters: (interface protocol type domain flags)
- ;; Register a service browser.
- (let ((object-path (zeroconf-register-service-browser (nth 2 val))))
- ;; Register the signals.
- (dolist (member '("ItemNew" "ItemRemove" "Failure"))
- (dbus-register-signal
- :system zeroconf-service-avahi object-path
- zeroconf-interface-avahi-service-browser member
- 'zeroconf-service-browser-handler))))))
+ (unless zeroconf-service-type-browser-handler-running
+ (let ((zeroconf-service-type-browser-handler-running t))
+ (when zeroconf-debug
+ (message "zeroconf-service-type-browser-handler: %s %S"
+ (dbus-event-member-name last-input-event) val))
+ (cond
+ ((string-equal (dbus-event-member-name last-input-event) "ItemNew")
+ ;; Parameters: (interface protocol type domain flags)
+ ;; Register a service browser.
+ (let ((object-path (zeroconf-register-service-browser (nth 2 val))))
+ ;; Register the signals.
+ (dolist (member '("ItemNew" "ItemRemove" "Failure"))
+ (dbus-register-signal
+ :system zeroconf-service-avahi object-path
+ zeroconf-interface-avahi-service-browser member
+ 'zeroconf-service-browser-handler))))))))
(defun zeroconf-register-service-browser (type)
"Register a service browser at the Avahi daemon."