Skip to content

gh-79033: Try to fix asyncio.Server.wait_closed() again#111336

Merged
willingc merged 2 commits intopython:mainfrom
gvanrossum:fix-wait-closed
Oct 28, 2023
Merged

gh-79033: Try to fix asyncio.Server.wait_closed() again#111336
willingc merged 2 commits intopython:mainfrom
gvanrossum:fix-wait-closed

Conversation

@gvanrossum
Copy link
Member

@gvanrossum gvanrossum commented Oct 25, 2023

I identified the condition that wait_closed() is intended to wait for: the server is closed and there are no more active connections.

When this condition first becomes true, _wakeup() is called (either from close() or from _detach()) and it sets _waiters to None. So we just check for self._waiters is None; if it's not None, we know we have to wait, and do so.

A problem was that the new test introduced in 3.12 explicitly tested that wait_closed() returns immediately when the server is not closed but there are currently no active connections. This was a mistake (probably a misunderstanding of the intended semantics). I've fixed the test, and added a separate test that checks exactly for this scenario.

I also fixed an oddity where in _wakeup() the result of the waiter was set to the waiter itself. This result is not used anywhere and I changed this to None, to avoid a GC cycle.


📚 Documentation preview 📚: https://cpython-previews--111336.org.readthedocs.build/

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants