Skip to content

Commit 926f483

Browse files
hexrain1st1
authored andcommitted
Close transport if connection times out (#468)
https://bugs.python.org/issue37658 #467
1 parent 9cbca1c commit 926f483

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

asyncpg/connect_utils.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -526,9 +526,15 @@ async def _connect_addr(*, addr, loop, timeout, params, config,
526526
else:
527527
connector = loop.create_connection(proto_factory, *addr)
528528

529+
connector = asyncio.ensure_future(connector)
530+
529531
before = time.monotonic()
530-
tr, pr = await asyncio.wait_for(
531-
connector, timeout=timeout, loop=loop)
532+
try:
533+
tr, pr = await asyncio.wait_for(
534+
connector, timeout=timeout, loop=loop)
535+
except asyncio.CancelledError:
536+
connector.add_done_callback(_close_leaked_connection)
537+
raise
532538
timeout -= time.monotonic() - before
533539

534540
try:
@@ -664,3 +670,12 @@ def _create_future(loop):
664670
return asyncio.Future(loop=loop)
665671
else:
666672
return create_future()
673+
674+
675+
def _close_leaked_connection(fut):
676+
try:
677+
tr, pr = fut.result()
678+
if tr:
679+
tr.close()
680+
except asyncio.CancelledError:
681+
pass # hide the exception

0 commit comments

Comments
 (0)