File tree Expand file tree Collapse file tree 3 files changed +28
-3
lines changed
Expand file tree Collapse file tree 3 files changed +28
-3
lines changed Original file line number Diff line number Diff line change 1+ Reduced redundant ``ClientResponse._release_connection() `` invocations so
2+ successful requests now trigger a single release-path call per response.
Original file line number Diff line number Diff line change @@ -510,7 +510,8 @@ def release(self) -> None:
510510 self ._closed = True
511511
512512 self ._cleanup_writer ()
513- self ._release_connection ()
513+ if self ._connection is not None :
514+ self ._release_connection ()
514515
515516 @property
516517 def ok (self ) -> bool :
@@ -558,7 +559,8 @@ async def _wait_released(self) -> None:
558559 and task .cancelling ()
559560 ):
560561 raise
561- self ._release_connection ()
562+ if self ._connection is not None :
563+ self ._release_connection ()
562564
563565 def _cleanup_writer (self ) -> None :
564566 if self .__writer is not None :
@@ -583,7 +585,8 @@ async def wait_for_close(self) -> None:
583585 and task .cancelling ()
584586 ):
585587 raise
586- self .release ()
588+ if not self ._released :
589+ self .release ()
587590
588591 async def read (self ) -> bytes :
589592 """Read response payload."""
Original file line number Diff line number Diff line change @@ -370,6 +370,26 @@ async def handler(request: web.Request) -> web.Response:
370370 assert 1 == len (client ._session .connector ._conns )
371371
372372
373+ async def test_release_connection_called_once_per_request (
374+ aiohttp_client : AiohttpClient , mocker : MockerFixture
375+ ) -> None :
376+ async def handler (request : web .Request ) -> web .Response :
377+ await request .read ()
378+ return web .Response (body = b"OK" )
379+
380+ app = web .Application ()
381+ app .router .add_route ("GET" , "/" , handler )
382+ client = await aiohttp_client (app )
383+
384+ spy = mocker .spy (aiohttp .client_reqrep .ClientResponse , "_release_connection" )
385+ for _ in range (3 ):
386+ async with client .get ("/" ) as resp :
387+ await resp .read ()
388+ await asyncio .sleep (0 )
389+
390+ assert spy .call_count == 3
391+
392+
373393async def test_HTTP_304 (aiohttp_client : AiohttpClient ) -> None :
374394 async def handler (request : web .Request ) -> web .Response :
375395 body = await request .read ()
You can’t perform that action at this time.
0 commit comments