1. 27 Jan, 2015 2 commits
    • Victor Stinner's avatar
      asyncio: sync with Tulip · ff018e40
      Victor Stinner authored
      * Remove unused SSLProtocol._closing attribute
      * test_sslproto: skip test if ssl module is missing
      * Python issue #23208: Don't use the traceback of the current handle if we
        already know the traceback of the source. The handle may be more revelant,
        but having 3 tracebacks (handle, source, exception) becomes more difficult to
        read. The handle may be preferred later but it requires more work to make
        this choice.
      ff018e40
    • Berker Peksag's avatar
      Issue #23286: Fix typo in the tutorial. · b68c420d
      Berker Peksag authored
      Patch by Mayank Tripathi.
      b68c420d
  2. 26 Jan, 2015 18 commits
  3. 25 Jan, 2015 4 commits
  4. 23 Jan, 2015 6 commits
  5. 22 Jan, 2015 6 commits
  6. 21 Jan, 2015 4 commits
    • Victor Stinner's avatar
      Issue #23095, asyncio: IocpProactor.close() must not cancel pending · 1ca9392c
      Victor Stinner authored
      _WaitCancelFuture futures
      1ca9392c
    • Victor Stinner's avatar
    • Victor Stinner's avatar
      Issue #23095, asyncio: Rewrite _WaitHandleFuture.cancel() · d0a28dee
      Victor Stinner authored
      This change fixes a race conditon related to _WaitHandleFuture.cancel() leading
      to Python crash or "GetQueuedCompletionStatus() returned an unexpected event"
      logs. Before, the overlapped object was destroyed too early, it was possible
      that the wait completed whereas the overlapped object was already destroyed.
      Sometimes, a different overlapped was allocated at the same address, leading to
      unexpected completition.
      
      _WaitHandleFuture.cancel() now waits until the wait is cancelled to clear its
      reference to the overlapped object. To wait until the cancellation is done,
      UnregisterWaitEx() is used with an event instead of UnregisterWait().
      
      To wait for this event, a new _WaitCancelFuture class was added. It's a
      simplified version of _WaitCancelFuture. For example, its cancel() method calls
      UnregisterWait(), not UnregisterWaitEx(). _WaitCancelFuture should not be
      cancelled.
      
      The overlapped object is kept alive in _WaitHandleFuture until the wait is
      unregistered.
      
      Other changes:
      
      * Add _overlapped.UnregisterWaitEx()
      * Remove fast-path in IocpProactor.wait_for_handle() to immediatly set the
        result if the wait already completed. I'm not sure that it's safe to
        call immediatly UnregisterWaitEx() before the completion was signaled.
      * Add IocpProactor._unregistered() to forget an overlapped which may never be
        signaled, but may be signaled for the next loop iteration. It avoids to
        block forever IocpProactor.close() if a wait was cancelled, and it may also
        avoid some "... unexpected event ..." warnings.
      d0a28dee
    • Victor Stinner's avatar
      asyncio: pyflakes, remove unused import · 442b0adc
      Victor Stinner authored
      tests: Remove unused function; inline another function
      442b0adc