I believe Victor already put a patch up for review, although I cannot find the issue right now. IIRC I even reviewed it -- but no search keywords I try show it, only the (AFAIK derived) http://bugs.python.org/issue21155
On Sat, Apr 5, 2014 at 1:24 AM, Jonathan Slenders < [email protected]> wrote: > How much time do we have for 3.4.1? > > I think in this case I think it should be a catch of CancelledError, not a > finally. On success, we don't want to close the socket when the coroutine > terminates. Do we? > > > > Le jeudi 3 avril 2014 19:33:24 UTC+2, Guido van Rossum a écrit : > >> On Thu, Apr 3, 2014 at 4:16 AM, Jonathan Slenders >> <[email protected]>wrote: >> >>> By blocking, I meant "not progressing anymore". Not that is blocks the >>> thread. >>> >>> >>> Should we catch CancelledError here at this line? >>> https://code.google.com/p/tulip/source/browse/asyncio/base_events.py#410 >>> >>> >> Or use a finally block. There are probably some other places where we >> don't clean up when unexpected exceptions strike. This was a good catch, >> Jonathan! We should make sure this is fixed in as many places as possible >> before 3.4.1 goes out. >> >> >>> >>> Le jeudi 3 avril 2014 12:10:56 UTC+2, Victor Stinner a écrit : >>>> >>>> Hi, >>>> >>>> 2014-04-03 11:34 GMT+02:00 Jonathan Slenders <[email protected]>: >>>> > First he proposed to wrap create_connection into wait_for with a >>>> timeout=1 >>>> > parameter, but that would leave the file descriptor open that was >>>> created in >>>> > BaseEventLoop.create_connection(). Therefore he proposes to create >>>> the >>>> > socket ourself, using sock_connect , and if that fails due to a >>>> timeout, >>>> > call sock.close manually. >>>> >>>> When you use wait_for(), the coroutine gets a CancelledError and so >>>> can cleanup its data (close the socket). >>>> >>>> If create_connection() doesn't close the socket on error, it's a bug. >>>> Please open an issue. >>>> >>>> > How is it possible that loop.create_connection blocks? >>>> >>>> The slowest part is probably the DNS resolution. By default, >>>> getaddrinfo() is called in a thread. >>>> >>>> > Doesn't it just fail after a while if the host is not reachable? >>>> >>>> Network operations can be slow, but create_connection() should not >>>> "block", the coroutine should be running in background, as any "async" >>>> task. >>>> >>>> It would help to identify exactly which Python line hangs. >>>> >>>> Victor >>>> >>> >> >> >> -- >> --Guido van Rossum (python.org/~guido) >> > -- --Guido van Rossum (python.org/~guido)
