branch: externals/async commit 666066d30a420d86801d8380f5991f2b82471107 Merge: 54977d6 d1273c8 Author: John Wiegley <jwieg...@gmail.com> Commit: GitHub <nore...@github.com>
Merge pull request #72 from jwiegley/Fix_async_ready Fix and clarify async-ready, async-get and async-wait (#71). --- async.el | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/async.el b/async.el index 0bb45fa..30476e2 100644 --- a/async.el +++ b/async.el @@ -169,24 +169,32 @@ as follows: (prin1 (list 'async-signal err))))))) (defun async-ready (future) - "Query a FUTURE to see if the ready is ready -- i.e., if no blocking + "Query a FUTURE to see if it is ready. + +I.e., if no blocking would result from a call to `async-get' on that FUTURE." (and (memq (process-status future) '(exit signal)) - (with-current-buffer (process-buffer future) - async-callback-value-set))) + (let ((buf (process-buffer future))) + (if (buffer-live-p buf) + (with-current-buffer buf + async-callback-value-set) + t)))) (defun async-wait (future) "Wait for FUTURE to become ready." (while (not (async-ready future)) - (sit-for 0.05))) + (sleep-for 0.05))) (defun async-get (future) - "Get the value from an asynchronously function when it is ready. + "Get the value from process FUTURE when it is ready. FUTURE is returned by `async-start' or `async-start-process' when its FINISH-FUNC is nil." - (async-wait future) - (with-current-buffer (process-buffer future) - (async-handle-result #'identity async-callback-value (current-buffer)))) + (and future (async-wait future)) + (let ((buf (process-buffer future))) + (when (buffer-live-p buf) + (with-current-buffer buf + (async-handle-result + #'identity async-callback-value (current-buffer)))))) (defun async-message-p (value) "Return true of VALUE is an async.el message packet."