emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#20159: closed (24.4; url-retrieve invokes same cal


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#20159: closed (24.4; url-retrieve invokes same callback twice with kill-buffer)
Date: Tue, 01 Mar 2016 04:10:02 +0000

Your message dated Tue, 01 Mar 2016 15:08:18 +1100
with message-id <address@hidden>
and subject line Re: bug#20159: 24.4; url-retrieve invokes same callback twice 
with kill-buffer
has caused the debbugs.gnu.org bug report #20159,
regarding 24.4; url-retrieve invokes same callback twice with kill-buffer
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
20159: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20159
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 24.4; url-retrieve invokes same callback twice with kill-buffer Date: Sat, 21 Mar 2015 16:46:16 -0400 User-agent: Notmuch/0.18+10~g7d81d70 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-unknown-linux-gnu)
Emacs 24.4.1 on x86_64 Linux, the callback passed to `url-retrieve' is
invoked twice if `kill-buffer' is called within the callback when the
status reports a connection failure. In the example below, it's assumed
this URL will reject the connection, which will cause `url-retrieve' to
asynchronously invoke the callback with an error status ("failed with
code 111\n"). The second invocation of the callback is synchronous with
the first invocation, because it's called recursively from within the
`kill-buffer' call. The error message the second time is "deleted\n".

    ;;; -*- lexical-binding: t; -*-
    (let ((calls 0))
      (url-retrieve "http://localhost:1/";
                    (lambda (_)
                      (assert (= 1 (cl-incf calls)))
                      (kill-buffer))))

When I eval the above expression, the assertion fails asynchronously.

    error in process sentinel: Assertion failed: (= 1 (cl-incf calls))

I expect the callback given to `url-retrieve' to never be invoked more
than once each time it's passed to `url-retrieve'. Ideally I expect it
to be called exactly once for each call to `url-retrieve', always
delivering errors asynchronously.

I also tested this on a Windows build of Emacs. The callback is invoked
zero times because the connection error is delivered synchronously at
the call to `url-retrieve' (which I now realize explains why connection
queuing doesn't work right on Windows). So even if the double-invoke
problem is fixed for Linux, the behavior still differs across platforms.



--- End Message ---
--- Begin Message --- Subject: Re: bug#20159: 24.4; url-retrieve invokes same callback twice with kill-buffer Date: Tue, 01 Mar 2016 15:08:18 +1100 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux)
The two statuses are these:

Process status failed
Process status closed

But I kinda think that url.el is behaving as specified.  The callbacks
may be called many times, and you're supposed to check the status.  And
if you're killing the same buffer twice, this is pilot error.

So I don't think there's really a bug here.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]