Skip to content

Commit 48a3c0d

Browse files
fix: Add try-catch for close to recover state on fail
1 parent 07129e5 commit 48a3c0d

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

Lib/asyncio/base_events.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -368,24 +368,28 @@ def sockets(self):
368368
def close(self):
369369
if self._state in {_ServerState.CLOSED, _ServerState.SHUTDOWN}:
370370
return
371-
else:
371+
372+
prev_state = self._state
373+
try:
372374
self._state = _ServerState.CLOSED
373375

374-
sockets = self._sockets
375-
if sockets is None:
376-
return
377-
self._sockets = None
376+
sockets = self._sockets
377+
if sockets is None:
378+
return
379+
self._sockets = None
378380

379-
for sock in sockets:
380-
self._loop._stop_serving(sock)
381+
for sock in sockets:
382+
self._loop._stop_serving(sock)
381383

382-
if (self._serving_forever_fut is not None and
383-
not self._serving_forever_fut.done()):
384-
self._serving_forever_fut.cancel()
385-
self._serving_forever_fut = None
384+
if (self._serving_forever_fut is not None and
385+
not self._serving_forever_fut.done()):
386+
self._serving_forever_fut.cancel()
387+
self._serving_forever_fut = None
386388

387-
if len(self._clients) == 0:
388-
self._shutdown()
389+
if len(self._clients) == 0:
390+
self._shutdown()
391+
except:
392+
self._state = prev_state
389393

390394
def close_clients(self):
391395
for transport in self._clients.copy():

0 commit comments

Comments
 (0)