1. 21 Jan, 2015 6 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
    • Victor Stinner's avatar
      asyncio: Enhance BaseProactorEventLoop._loop_self_reading() · cd0f7f98
      Victor Stinner authored
      * Handle correctly CancelledError: just exit
      * On error, log the exception and exit
      
      Don't try to close the event loop, it is probably running and so it cannot be
      closed.
      cd0f7f98
    • Gregory P. Smith's avatar
      Add the command line to the AssertionError raised by test.script_helper's · b5684c48
      Gregory P. Smith authored
      Python subprocess failure assertion error messages for easier debugging.
      
      Adds a unittest for test.script_helper to confirm that this code works as
      it is otherwise uncovered by an already passing test suite that uses it. :)
      b5684c48
  2. 20 Jan, 2015 2 commits
  3. 18 Jan, 2015 6 commits
  4. 17 Jan, 2015 2 commits
  5. 15 Jan, 2015 22 commits
  6. 14 Jan, 2015 2 commits
    • Victor Stinner's avatar
      asyncio: sync with Tulip · 29ad0111
      Victor Stinner authored
      * PipeHandle now uses None instead of -1 for a closed handle
      * Sort imports in windows_utils.
      * Fix test_events on Python older than 3.5. Skip SSL tests on the
        ProactorEventLoop if ssl.MemoryIO is missing
      * Fix BaseEventLoop._create_connection_transport(). Close the transport if the
        creation of the transport (if the waiter) gets an exception.
      * _ProactorBasePipeTransport now sets _sock to None when the transport is
        closed.
      * Fix BaseSubprocessTransport.close(). Ignore pipes for which the protocol is
        not set yet (still equal to None).
      * TestLoop.close() now calls the close() method of the parent class
        (BaseEventLoop).
      * Cleanup BaseSelectorEventLoop: create the protocol on a separated line for
        readability and ease debugging.
      * Fix BaseSubprocessTransport._kill_wait(). Set the _returncode attribute, so
        close() doesn't try to terminate the process.
      * Tests: explicitly close event loops and transports
      * UNIX pipe transports: add closed/closing in repr(). Add "closed" or "closing"
        state in the __repr__() method of _UnixReadPipeTransport and
        _UnixWritePipeTransport classes.
      29ad0111
    • Victor Stinner's avatar
      Issue #23197: On SSL handshake failure on matching hostname, check if the · b92626df
      Victor Stinner authored
      waiter is cancelled before setting its exception.
      b92626df