From cc2ab7327027e47a0a5dff2fb8c1051a866baf40 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Wed, 14 Mar 2012 03:44:09 +0100 Subject: [PATCH] Always call the callback when timing out url-queue jobs * url-queue.el (url-queue-kill-job): Make sure that the callback is always called, even if we have a timeout. --- lisp/url/ChangeLog | 5 +++++ lisp/url/url-queue.el | 17 ++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 960649bdbc9..ff6a6e6f805 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,8 @@ +2012-03-14 Lars Magne Ingebrigtsen + + * url-queue.el (url-queue-kill-job): Make sure that the callback + is always called, even if we have a timeout. + 2012-03-11 Chong Yidong * url-http.el (url-http-end-of-document-sentinel): Handle diff --git a/lisp/url/url-queue.el b/lisp/url/url-queue.el index 6e4cedddaf3..46124717fed 100644 --- a/lisp/url/url-queue.el +++ b/lisp/url/url-queue.el @@ -156,9 +156,20 @@ The variable `url-queue-timeout' sets a timeout." (while (setq process (get-buffer-process (url-queue-buffer job))) (set-process-sentinel process 'ignore) (ignore-errors - (delete-process process)))) - (ignore-errors - (kill-buffer (url-queue-buffer job))))) + (delete-process process))))) + ;; Call the callback with an error message to ensure that the caller + ;; is notified that the job has failed. + (with-current-buffer + (if (bufferp (url-queue-buffer job)) + ;; Use the (partially filled) process buffer it it exists. + (url-queue-buffer job) + ;; If not, just create a new buffer, which will probably be + ;; killed again by the caller. + (generate-new-buffer " *temp*")) + (apply (url-queue-callback job) + (cons (list :error (list 'error 'url-queue-timeout + "Queue timeout exceeded")) + (url-queue-cbargs job))))) (provide 'url-queue)