summaryrefslogtreecommitdiffstats
path: root/Programs
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2023-10-28 18:04:29 (GMT)
committerGitHub <noreply@github.com>2023-10-28 18:04:29 (GMT)
commit26553695592ad399f735d4dbaf32fd871d0bb1e1 (patch)
tree7f777a94e61f9cdc97a961f235019034f0411b3c /Programs
parent9d4a1a480b65196c3aabbcd2d165d1fb86d0c8e5 (diff)
downloadcpython-26553695592ad399f735d4dbaf32fd871d0bb1e1.zip
cpython-26553695592ad399f735d4dbaf32fd871d0bb1e1.tar.gz
cpython-26553695592ad399f735d4dbaf32fd871d0bb1e1.tar.bz2
gh-79033: Try to fix asyncio.Server.wait_closed() again (GH-111336)
* Try to fix asyncio.Server.wait_closed() again 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. * Update Lib/asyncio/base_events.py --------- Co-authored-by: Carol Willing <carolcode@willingconsulting.com>
Diffstat (limited to 'Programs')
0 files changed, 0 insertions, 0 deletions