summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio
Commit message (Collapse)AuthorAgeFilesLines
* Issue #23293, asyncio: Rewrite IocpProactor.connect_pipe()Victor Stinner2015-01-221-17/+26
| | | | | | | | Add _overlapped.ConnectPipe() which tries to connect to the pipe for asynchronous I/O (overlapped): call CreateFile() in a loop until it doesn't fail with ERROR_PIPE_BUSY. Use an increasing delay between 1 ms and 100 ms. Remove Overlapped.WaitNamedPipeAndConnect() which is no more used.
* asyncio: IocpProactor.close() doesn't cancel anymore futures which are alreadyVictor Stinner2015-01-221-3/+7
| | | | cancelled
* Issue #23095, asyncio: IocpProactor.close() must not cancel pendingVictor Stinner2015-01-211-0/+6
| | | | _WaitCancelFuture futures
* asyncio: BaseEventLoop._create_connection_transport() catchs any exception, notVictor Stinner2015-01-211-1/+1
| | | | only Exception
* Issue #23095, asyncio: Rewrite _WaitHandleFuture.cancel()Victor Stinner2015-01-211-34/+134
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* asyncio: pyflakes, remove unused importVictor Stinner2015-01-212-2/+1
| | | | tests: Remove unused function; inline another function
* asyncio: Enhance BaseProactorEventLoop._loop_self_reading()Victor Stinner2015-01-211-3/+9
| | | | | | | | * 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.
* Backout changeset 6ab2575bc12bVictor Stinner2015-01-151-21/+4
| | | | | | | StreamWriter: close() now clears the reference to the transport StreamWriter now raises an exception if it is closed: write(), writelines(), write_eof(), can_write_eof(), get_extra_info(), drain().
* Closes #23219: cancelling asyncio.wait_for() now cancels the taskVictor Stinner2015-01-151-4/+8
|
* asyncio: Close the transport on subprocess creation failureVictor Stinner2015-01-152-2/+11
|
* asyncio: Fix _ProactorBasePipeTransport.close()Victor Stinner2015-01-151-1/+3
| | | | | | | Set the _read_fut attribute to None after cancelling it. This change should fix a race condition with _ProactorWritePipeTransport._pipe_closed().
* asyncio: Fix _ProactorBasePipeTransport.__repr__()Victor Stinner2015-01-151-3/+3
| | | | Check if the _sock attribute is None to check if the transport is closed.
* Issue #23243: Fix asyncio._UnixWritePipeTransport.close()Victor Stinner2015-01-151-1/+1
| | | | | Do nothing if the transport is already closed. Before it was not possible to close the transport twice.
* SSLProtocol: set the _transport attribute in the constructorVictor Stinner2015-01-151-0/+1
|
* Issue #23242: asyncio.SubprocessStreamProtocol now closes the subprocessVictor Stinner2015-01-151-1/+4
| | | | | | transport at subprocess exit. Clear also its reference to the transport.
* Issue #22560: Fix typo: call -> call_soonVictor Stinner2015-01-151-1/+1
|
* Issue #22560: Fix SSLProtocol._on_handshake_complete()Victor Stinner2015-01-151-2/+6
| | | | | | Don't call immediatly self._process_write_backlog() but schedule the call using call_soon(). _on_handshake_complete() can be called indirectly from _process_write_backlog(), and _process_write_backlog() is not reentrant.
* StreamWriter: close() now clears the reference to the transportVictor Stinner2015-01-151-4/+21
| | | | | StreamWriter now raises an exception if it is closed: write(), writelines(), write_eof(), can_write_eof(), get_extra_info(), drain().
* asyncio: sync with TulipVictor Stinner2015-01-147-11/+31
| | | | | | | | | | | | | | | | | | | | | | | * 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.
* Issue #23197: On SSL handshake failure on matching hostname, check if theVictor Stinner2015-01-141-1/+2
| | | | waiter is cancelled before setting its exception.
* Issue #23197, asyncio: On SSL handshake failure, check if the waiter isVictor Stinner2015-01-142-3/+4
| | | | | | | cancelled before setting its exception. * Add unit tests for this case. * Cleanup also sslproto.py
* Python issue #23173: sync with TulipVictor Stinner2015-01-142-27/+66
| | | | | | | | * If an exception is raised during the creation of a subprocess, kill the subprocess (close pipes, kill and read the return status). Log an error in such case. * Fix SubprocessStreamProtocol.connection_made() to handle cancelled waiter. Add unit test cancelling subprocess methods.
* Issue #23198: Reactor asyncio.StreamReaderVictor Stinner2015-01-131-25/+22
| | | | | | - Add a new _wakeup_waiter() method - Replace _create_waiter() method with a _wait_for_data() coroutine function - Use the value None instead of True or False to wake up the waiter
* Issue #22560: New SSL implementation based on ssl.MemoryBIOVictor Stinner2015-01-134-27/+694
| | | | | | | | | | | | | | | | | | | The new SSL implementation is based on the new ssl.MemoryBIO which is only available on Python 3.5. On Python 3.4 and older, the legacy SSL implementation (using SSL_write, SSL_read, etc.) is used. The proactor event loop only supports the new implementation. The new asyncio.sslproto module adds _SSLPipe, SSLProtocol and _SSLProtocolTransport classes. _SSLPipe allows to "wrap" or "unwrap" a socket (switch between cleartext and SSL/TLS). Patch written by Antoine Pitrou. sslproto.py is based on gruvi/ssl.py of the gruvi project written by Geert Jansen. This change adds SSL support to ProactorEventLoop on Python 3.5 and newer! It becomes also possible to implement STARTTTLS: switch a cleartext socket to SSL.
* Issue #22922: Fix ProactorEventLoop.close()Victor Stinner2015-01-131-1/+7
| | | | | Close the IocpProactor before closing the event loop. IocpProactor.close() can call loop.call_soon(), which is forbidden when the event loop is closed.
* Issue #23209: Break some reference cycles in asyncio. Patch written by MartinVictor Stinner2015-01-092-1/+2
| | | | Richard.
* asyncio: sync with TulipVictor Stinner2015-01-095-11/+10
| | | | | | | * Tulip issue 184: FlowControlMixin constructor now get the event loop if the loop parameter is not set. Add unit tests to ensure that constructor of StreamReader and StreamReaderProtocol classes get the event loop. * Remove outdated TODO/XXX
* asyncio: sync with TulipVictor Stinner2015-01-093-7/+16
| | | | | | | | * Document why set_result() calls are safe * Cleanup gather(). Use public methods instead of hacks to consume the exception of a future. * sock_connect(): pass directly the fd to _sock_connect_done instead of the socket.
* asyncio: Truncate to 80 columnsVictor Stinner2015-01-087-15/+23
|
* asyncio: _make_ssl_transport: make the waiter parameter optionalVictor Stinner2015-01-082-3/+3
|
* Issue #23140, asyncio: Fix cancellation of Process.wait(). Check the state ofVictor Stinner2015-01-061-1/+2
| | | | the waiter future before setting its result.
* Issue #23046: Expose the BaseEventLoop class in the asyncio namespaceVictor Stinner2015-01-062-2/+4
|
* Issue #22926: In debug mode, call_soon(), call_at() and call_later() methods ofVictor Stinner2014-12-263-23/+23
| | | | | | | | | | asyncio.BaseEventLoop now use the identifier of the current thread to ensure that they are called from the thread running the event loop. Before, the get_event_loop() method was used to check the thread, and no exception was raised when the thread had no event loop. Now the methods always raise an exception in debug mode when called from the wrong thread. It should help to notice misusage of the API.
* asyncio doc: update also Queue docstringsVictor Stinner2014-12-221-3/+7
|
* asyncio: IocpProactor.wait_for_handle() test now also checks the result of theVictor Stinner2014-12-191-0/+5
| | | | future
* asyncio: sync with TulipVictor Stinner2014-12-183-2/+9
| | | | | | | | | | | | | | | | * Fix a race condition in BaseSubprocessTransport._try_finish(). If the process exited before the _post_init() method was called, scheduling the call to _call_connection_lost() with call_soon() is wrong: connection_made() must be called before connection_lost(). Reuse the BaseSubprocessTransport._call() method to schedule the call to _call_connection_lost() to ensure that connection_made() and connection_lost() are called in the correct order. * Add repr(PipeHandle) * Fix typo
* Issue #23074: asyncio.get_event_loop() now raises an exception if the threadVictor Stinner2014-12-182-4/+4
| | | | has no event loop even if assertions are disabled.
* asyncio, tulip issue 209: Fix subprocess for close_fds=False on Python 3.3Victor Stinner2014-12-111-0/+22
| | | | Mark the write end of the stdin pipe as non-inheritable.
* asyncio, tulip issue 202: Add unit test of pause/resume writing for proactorVictor Stinner2014-12-111-4/+0
| | | | socket transport
* Closes #22429, asyncio: Fix EventLoop.run_until_complete(), don't stop theVictor Stinner2014-12-051-2/+12
| | | | | event loop if a BaseException is raised, because the event loop is already stopped.
* Issue #22922: Fix ProactorEventLoop.close()Victor Stinner2014-12-051-1/+3
| | | | | Call _stop_accept_futures() before sestting the _closed attribute, otherwise call_soon() raises an error.
* Closes #22922: More EventLoop methods fail if the loop is closed. Initial patchVictor Stinner2014-12-042-0/+5
| | | | | | | written by Torsten Landschoff. create_task(), call_at(), call_soon(), call_soon_threadsafe() and run_in_executor() now raise an error if the event loop is closed.
* asyncio: Initialize more Future and Task attributes in the class definition toVictor Stinner2014-12-042-5/+5
| | | | avoid attribute errors in destructors.
* Closes #22475: asyncio doc, fix Task.get_stack() docVictor Stinner2014-12-021-1/+1
|
* Removed duplicated words in in comments and docs.Serhiy Storchaka2014-12-011-1/+1
|
* Closes #22685, asyncio: Set the transport of stdout and stderr StreamReaderVictor Stinner2014-11-251-5/+12
| | | | | objects in the SubprocessStreamProtocol. It allows to pause the transport to not buffer too much stdout or stderr data.
* don't require OpenSSL SNI to pass hostname to ssl functions (#22921)Benjamin Peterson2014-11-231-1/+1
| | | | Patch by Donald Stufft.
* asyncio: BaseSelectorEventLoop.close() now closes the self-pipe before callingVictor Stinner2014-11-201-1/+3
| | | | | the parent close() method. If the event loop is already closed, the self-pipe is not unregistered from the selector.
* asyncio: Coroutine objects are now rejected with a TypeError by the followingVictor Stinner2014-11-202-6/+10
| | | | | | | | | | | | | | functions: * add_signal_handler() * call_at() * call_later() * call_soon() * call_soon_threadsafe() * run_in_executor() Fix also the error message of add_signal_handler() (fix the name of the function).
* asyncio: Fix formatting of the "Future exception was never retrieved" inVictor Stinner2014-11-201-3/+4
| | | | release mode