Repository navigation
gh-156365: Fix socket leak and stalled accept in the asyncio proactor server - #156366
tonghuaroot wants to merge 2 commits into
Conversation
OsmnvAslan
left a comment
There was a problem hiding this comment.
Ran this locally: it merges cleanly into current main, test_asyncio passes, and both new tests fail without the fix. It matches the selector change from gh-155934, so LGTM.
One small thing: the new context = {...} inside loop() shadows the context parameter of _start_serving(). It's unused in the proactor path right now, so nothing breaks, but renaming it (e.g. exc_context) would avoid a surprise if context=context is ever passed to the transport here like in the selector version.
|
renamed the local exception context and merged current main while preserving the closed server and connection reset handling. the full asyncio test suite passes. |
|
the ios failure is unrelated to this change. the external ftp server returned a bad ip error. a maintainer rerun would be appreciated. |
BaseProactorEventLoop._start_serving()ranprotocol_factory()and transport creation in the accept callback guarded only byexcept OSError/except CancelledError. A per-connection failure therefore leaked the accepted socket and either stopped the accept loop (non-OSError) or closed the listening socket (OSError).Wrap the per-connection setup so the accepted socket is closed and the error is reported to the loop exception handler, while accept-stage errors keep their existing handling. This is the proactor counterpart of gh-155934 (selector) and gh-153133 (
create_connection).The added regression tests fail without the fix and pass with it; the full
test_asynciosuite passes.