@@ -1497,7 +1497,12 @@ async def create_datagram_endpoint(self, protocol_factory,
14971497 else :
14981498 raise exceptions [0 ]
14991499
1500- protocol = protocol_factory ()
1500+ try :
1501+ protocol = protocol_factory ()
1502+ except :
1503+ # gh-156400: no transport owns the socket yet, so close it.
1504+ sock .close ()
1505+ raise
15011506 waiter = self .create_future ()
15021507 transport = self ._make_datagram_transport (
15031508 sock , protocol , r_addr , waiter )
@@ -1714,7 +1719,12 @@ async def connect_accepted_socket(
17141719 return transport , protocol
17151720
17161721 async def connect_read_pipe (self , protocol_factory , pipe ):
1717- protocol = protocol_factory ()
1722+ try :
1723+ protocol = protocol_factory ()
1724+ except :
1725+ # gh-156400: no transport owns the pipe yet, so close it.
1726+ pipe .close ()
1727+ raise
17181728 waiter = self .create_future ()
17191729 transport = self ._make_read_pipe_transport (pipe , protocol , waiter )
17201730
@@ -1730,7 +1740,12 @@ async def connect_read_pipe(self, protocol_factory, pipe):
17301740 return transport , protocol
17311741
17321742 async def connect_write_pipe (self , protocol_factory , pipe ):
1733- protocol = protocol_factory ()
1743+ try :
1744+ protocol = protocol_factory ()
1745+ except :
1746+ # gh-156400: no transport owns the pipe yet, so close it.
1747+ pipe .close ()
1748+ raise
17341749 waiter = self .create_future ()
17351750 transport = self ._make_write_pipe_transport (pipe , protocol , waiter )
17361751
0 commit comments