-
-
Notifications
You must be signed in to change notification settings - Fork 30.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GH-79033: Fix asyncio.Server.wait_closed() #98582
Conversation
It was a no-op when used as recommended (after close()). I had to debug one test (test__sock_sendfile_native_failure) -- the cleanup sequence for the test fixture was botched. Hopefully that's not a portend of problems in user code -- this has never worked so people may well be doing this wrong. :-(
Needs test and news entry |
@kumaraditya303 Can you suggest a test for this? |
Something like should work: diff --git a/Lib/test/test_asyncio/test_server.py b/Lib/test/test_asyncio/test_server.py
index 860d62d52e..ceea4059ae 100644
--- a/Lib/test/test_asyncio/test_server.py
+++ b/Lib/test/test_asyncio/test_server.py
@@ -120,6 +120,26 @@ async def main(srv):
self.loop.run_until_complete(srv.serve_forever())
+class TestServer2(unittest.IsolatedAsyncioTestCase):
+
+ async def test_wait_closed(self):
+ async def serve(*args):
+ pass
+
+ srv = await asyncio.start_server(serve, socket_helper.HOSTv4, 0)
+
+ # active count = 0
+ wait = asyncio.create_task(srv.wait_closed())
+ await asyncio.sleep(0)
+ self.assertTrue(wait.done())
+
+ # active count != 0
+ srv._attach()
+ wait = asyncio.create_task(srv.wait_closed())
+ await asyncio.sleep(0)
+ self.assertFalse(wait.done())
+
+
@unittest.skipUnless(hasattr(asyncio, 'ProactorEventLoop'), 'Windows only')
class ProactorStartServerTests(BaseStartServer, unittest.TestCase):
Creating a test with an actual client seems rather flaky as it requires a heavy load on server so will be unreliable. |
Thanks! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks!
Let’s not backport, I fear it will surprise some users since it never worked. |
wait_closed() was a no-op when used as recommended (after close()).
I had to debug one test (test__sock_sendfile_native_failure) -- the cleanup sequence for the test fixture was botched.
Hopefully that's not a portend of problems in user code -- this has never worked so people may well be doing this wrong. :-(