Mercurial > emacs
changeset 61630:68114d546e48
(url-retrieve-synchronously): Work around the fact that
url-http sometimes doesn't call the callback.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 18 Apr 2005 13:19:43 +0000 |
parents | cacf55df1896 |
children | c17a96999f36 |
files | lisp/url/ChangeLog lisp/url/url.el |
diffstat | 2 files changed, 22 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/url/ChangeLog Mon Apr 18 11:34:46 2005 +0000 +++ b/lisp/url/ChangeLog Mon Apr 18 13:19:43 2005 +0000 @@ -1,3 +1,8 @@ +2005-04-18 Stefan Monnier <monnier@iro.umontreal.ca> + + * url.el (url-retrieve-synchronously): Work around the fact that + url-http sometimes doesn't call the callback. + 2005-04-04 Lute Kamstra <lute@gnu.org> * url-handlers.el (url-handler-mode): Specify :group.
--- a/lisp/url/url.el Mon Apr 18 11:34:46 2005 +0000 +++ b/lisp/url/url.el Mon Apr 18 13:19:43 2005 +0000 @@ -180,15 +180,23 @@ (url-debug 'retrieval "Spinning in url-retrieve-synchronously: %S (%S)" retrieval-done asynch-buffer) - ;; We used to use `sit-for' here, but in some cases it wouldn't - ;; work because apparently pending keyboard input would always - ;; interrupt it before it got a chance to handle process input. - ;; `sleep-for' was tried but it lead to other forms of - ;; hanging. --Stef - (unless (accept-process-output proc) - ;; accept-process-output returned nil, maybe because the process - ;; exited (and may have been replaced with another). - (setq proc (get-buffer-process asynch-buffer))))) + (if (memq (process-status proc) '(closed exit signal failed)) + ;; FIXME: It's not clear whether url-retrieve's callback is + ;; guaranteed to be called or not. It seems that url-http + ;; decides sometimes consciously not to call it, so it's not + ;; clear that it's a bug, but even if we need to decide how + ;; url-http can then warn us that the download has completed. + ;; In the mean time, we use this here workaround. + (setq retrieval-done t) + ;; We used to use `sit-for' here, but in some cases it wouldn't + ;; work because apparently pending keyboard input would always + ;; interrupt it before it got a chance to handle process input. + ;; `sleep-for' was tried but it lead to other forms of + ;; hanging. --Stef + (unless (accept-process-output proc) + ;; accept-process-output returned nil, maybe because the process + ;; exited (and may have been replaced with another). + (setq proc (get-buffer-process asynch-buffer)))))) asynch-buffer))) (defun url-mm-callback (&rest ignored)