| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
event loop or a transport is not explicitly closed
|
| |
|
| |
|
|
|
|
|
| |
* Close the transport on error
* In debug mode, log errors using call_exception_handler()
|
|
|
|
| |
Only start reading when connection_made() has been called.
|
|
|
|
| |
attribute
|
|
|
|
|
|
|
|
| |
Don't call protocol.connection_lost() if protocol.connection_made() was not
called yet: if the SSL handshake failed or is still in progress.
The close() method can be called if the creation of the connection is
cancelled, by a timeout for example.
|
| |
|
|
|
|
| |
Only start reading after connection_made() has been called.
|
|
|
|
| |
close() closes pipes, which is not None yet by _kill_wait().
|
|
|
|
|
| |
Only start reading when connection_made() has been called:
protocol.data_received() must not be called before protocol.connection_made().
|
|
|
|
|
|
|
| |
* Rephrase also the comment explaining why the waiter is not awaken immediatly.
* SSLProtocol.eof_received() doesn't instanciate ConnectionResetError exception
directly, it will be done by Future.set_exception(). The exception is not
used if the waiter was cancelled or if there is no waiter.
|
|
|
|
| |
Wake-up the waiter if it is not done yet.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
| |
If ReadFile() fails with ERROR_BROKEN_PIPE, the operation is not pending: don't
register the overlapped.
I don't know if WSARecv() can fail with ERROR_BROKEN_PIPE. Since
Overlapped.WSARecv() already handled ERROR_BROKEN_PIPE, let me guess that it
has the same behaviour than ReadFile().
|
|
|
|
|
| |
If UnregisterWaitEx() fais with ERROR_IO_PENDING, it doesn't mean that the wait
is unregistered yet. We still have to wait until the wait is cancelled.
|
|
|
|
|
|
|
| |
Use a coroutine with asyncio.sleep() instead of call_later() to ensure that the
schedule call is cancelled.
Add also a unit test cancelling connect_pipe().
|
| |
|
|
|
|
|
| |
If a client connected before the server was closed: drop the client (close the
pipe) and exit
|
|
|
|
|
|
|
|
|
| |
In debug mode, BaseEventLoop._run_once() now sets the
BaseEventLoop._current_handle attribute to the handle currently executed.
In release mode or when no handle is executed, the attribute is None.
BaseEventLoop.default_exception_handler() displays the traceback of the current
handle if available.
|
|
|
|
|
| |
Fixing some comments. The server listens on 12345 and client connects
on 12345, but the comments state 1234. Patch written by bryan.neff.
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
Override the connect_read_pipe() method of the loop to mock immediatly
pause_reading() and resume_reading() methods.
The test failed randomly on FreeBSD 9 buildbot and on Windows using trollius.
|
|
|
|
|
|
|
| |
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().
|
| |
|
|
|
|
|
|
|
|
|
| |
* Use test_utils.run_briefly() to execute pending calls to really close
transports
* sslproto: mock also _SSLPipe.shutdown(), it's need to close the transport
* pipe test: the test doesn't close explicitly the PipeHandle, so ignore
the warning instead
* test_popen: use the context manager ("with p:") to explicitly close pipes
|
| |
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|