[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r116456: Improve dbus performance on synchronous cal
From: |
Daniel Colascione |
Subject: |
[Emacs-diffs] trunk r116456: Improve dbus performance on synchronous calls |
Date: |
Mon, 17 Feb 2014 11:42:00 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 116456
revision-id: address@hidden
parent: address@hidden
committer: Daniel Colascione <address@hidden>
branch nick: trunk
timestamp: Mon 2014-02-17 03:41:42 -0800
message:
Improve dbus performance on synchronous calls
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/net/dbus.el dbus.el-20091113204419-o5vbwnq5f7feedwu-7962
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2014-02-16 17:23:00 +0000
+++ b/lisp/ChangeLog 2014-02-17 11:41:42 +0000
@@ -1,3 +1,9 @@
+2014-02-17 Daniel Colascione <address@hidden>
+
+ * net/dbus.el (dbus-call-method): Work around bug#16775 by having
+ dbus-call-method check for completion using a busy-wait loop with
+ gradual backoff.
+
2013-10-02 Michael Albinus <address@hidden>
Sync with Tramp 2.2.9.
=== modified file 'lisp/net/dbus.el'
--- a/lisp/net/dbus.el 2014-01-01 07:43:34 +0000
+++ b/lisp/net/dbus.el 2014-02-17 11:41:42 +0000
@@ -260,6 +260,7 @@
(signal 'wrong-type-argument (list 'stringp method)))
(let ((timeout (plist-get args :timeout))
+ (check-interval 0.001)
(key
(apply
'dbus-message-internal dbus-message-type-method-call
@@ -270,13 +271,21 @@
;; default 25". Events which are not from D-Bus must be restored.
;; `read-event' performs a redisplay. This must be suppressed; it
;; hurts when reading D-Bus events asynchronously.
+
+ ;; Work around bug#16775 by busy-waiting with gradual backoff for
+ ;; dbus calls to complete. A better aproach would involve either
+ ;; adding arbitrary wait condition support to read-event or
+ ;; restructuring dbus as a kind of process object. Poll at most
+ ;; about once per second for completion.
+
(with-timeout ((if timeout (/ timeout 1000.0) 25))
(while (eq (gethash key dbus-return-values-table :ignore) :ignore)
- (let ((event (let ((inhibit-redisplay t) unread-command-events)
- (read-event nil nil 0.1))))
- (when (and event (not (ignore-errors (dbus-check-event event))))
- (setq unread-command-events
- (append unread-command-events (list event)))))))
+ (let ((event (let ((inhibit-redisplay t) unread-command-events)
+ (read-event nil nil check-interval))))
+ (when event
+ (push event unread-command-events))
+ (when (< check-interval 1)
+ (setf check-interval (* check-interval 1.05))))))
;; Cleanup `dbus-return-values-table'. Return the result.
(prog1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r116456: Improve dbus performance on synchronous calls,
Daniel Colascione <=