| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
Issue #222: Fix the @coroutine decorator for functions without __name__
attribute like functools.partial().
Enhance also the representation of a CoroWrapper if the coroutine
function is a functools.partial().
|
| |
|
|
|
|
|
|
| |
again if the first call to connect() raises an InterruptedError.
When the C function connect() fails with EINTR, the connection runs in
background. We have to wait until the socket becomes writable to be notified
when the connection succeed or fails.
|
| | |
|
| | |
|
| |
|
|
|
| |
Replace "running" with "not started" and don't show the pid if the subprocess
didn't start yet.
|
| |
|
|
| |
Methods only raise NotImplementedError and are never used.
|
| |\ |
|
| | |
| |
| |
| |
| |
| | |
To more closely match the standard Queue, asyncio.Queue has "join" and "task_done".
JoinableQueue remains as a deprecated alias for Queue to avoid needlessly breaking
too much code that depended on it.
|
| | | |
|
| | |
| |
| |
| |
| | |
To more closely match the standard Queue, asyncio.Queue has "join" and
"task_done". JoinableQueue is deleted.
|
| | |
| |
| |
| |
| | |
The special case for connect_pipe() is not more needed. connect_pipe() doesn't
use overlapped operations anymore.
|
| | |
| |
| |
| |
| | |
Fix create_datagram_endpoint(), connect_read_pipe() and connect_write_pipe():
close the transport if the task is cancelled or on error.
|
| | |
| |
| |
| |
| |
| |
| |
| | |
Overlapped.ConnectNamedPipe() now returns a boolean: True if the pipe is
connected (if ConnectNamedPipe() failed with ERROR_PIPE_CONNECTED), False if
the connection is in progress.
This change removes multiple hacks in IocpProactor.
|
| | |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | | |
|
| | |
| |
| |
| | |
_WaitCancelFuture futures
|
| | |
| |
| |
| | |
Exception
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| | |
* 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.
|
| | |
| |
| |
| | |
Remove the exc variable, it's not used.
|
| | |
| |
| |
| |
| |
| |
| | |
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().
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| | |
Set the _read_fut attribute to None after cancelling it.
This change should fix a race condition with
_ProactorWritePipeTransport._pipe_closed().
|
| | |
| |
| |
| | |
Check if the _sock attribute is None to check if the transport is closed.
|
| | |
| |
| |
| |
| | |
Do nothing if the transport is already closed. Before it was not possible to
close the transport twice.
|
| | | |
|
| | |
| |
| |
| |
| |
| | |
transport at subprocess exit.
Clear also its reference to the transport.
|
| | |
| |
| |
| |
| |
| | |
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 now raises an exception if it is closed: write(), writelines(),
write_eof(), can_write_eof(), get_extra_info(), drain().
|
| | |
| |
| |
| | |
Sort also imports in windows_utils.
|
| | |
| |
| |
| |
| | |
Close the transport if the creation of the transport (if the waiter) gets an
exception.
|
| | | |
|
| | |
| |
| |
| | |
Ignore pipes for which the protocol is not set yet (still equal to None).
|
| | |
| |
| |
| | |
(BaseEventLoop)
|
| | |
| |
| |
| | |
Create the protocol on a separated line for readability and ease debugging.
|
| | |
| |
| |
| | |
Set the _returncode attribute, so close() doesn't try to terminate the process.
|
| | |
| |
| |
| |
| | |
Add "closed" or "closing" state in the __repr__() method of
_UnixReadPipeTransport and _UnixWritePipeTransport classes.
|
| | |
| |
| |
| | |
the waiter is cancelled before setting its exception.
|
| | |
| |
| |
| |
| |
| | |
before setting its exception.
Add unit tests for this case.
|
| | | |
|
| | |
| |
| |
| |
| |
| | |
cancelled waiter.
Add unit test cancelling subprocess methods.
|
| | |
| |
| |
| |
| | |
subprocess, kill the subprocess (close pipes, kill and read the return status).
Log an error in such case.
|
| | |
| |
| |
| |
| |
| | |
- 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
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
| |
| |
| |
| | |
Close the IocpProactor before closing the event loop. IocpProactor.close() can
call loop.call_soon(), which is forbidden when the event loop is closed.
|
| | |
| |
| |
| |
| |
| | |
RuntimeError if the selector is closed. And selectors.BaseSelector.close() now
clears its internal reference to the selector mapping to break a reference
cycle. Initial patch written by Martin Richard.
|
| | | |
|
| | |
| |
| |
| | |
Martin Richard.
|