@@ -153,18 +153,35 @@ async def _get_or_create_session(
153153 close_session_callback = self ._delete_session ,
154154 )
155155 else :
156- # If the instance id is the same, we reuse the session and assign
157- # a new websocket to it.
158- logger .debug (
159- 'Reuse old session with "%s" using new ws: %s' ,
160- to_id ,
161- websocket .id ,
162- )
163- try :
164- await old_session .replace_with_new_websocket (websocket )
165- new_session = old_session
166- except FailedSendingMessageException as e :
167- raise e
156+ if not await old_session .is_session_open ():
157+ logger .info (
158+ 'Session "%s" is not active, creating replacement '
159+ "session %s instead of reusing" ,
160+ to_id ,
161+ session_id ,
162+ )
163+ new_session = ServerSession (
164+ transport_id ,
165+ to_id ,
166+ session_id ,
167+ websocket ,
168+ self ._transport_options ,
169+ self ._handlers ,
170+ close_session_callback = self ._delete_session ,
171+ )
172+ else :
173+ # If the instance id is the same, we reuse the session and assign
174+ # a new websocket to it.
175+ logger .debug (
176+ 'Reuse old session with "%s" using new ws: %s' ,
177+ to_id ,
178+ websocket .id ,
179+ )
180+ try :
181+ await old_session .replace_with_new_websocket (websocket )
182+ new_session = old_session
183+ except FailedSendingMessageException as e :
184+ raise e
168185
169186 self ._sessions [new_session ._to_id ] = new_session
170187
@@ -311,5 +328,6 @@ async def _establish_handshake(
311328
312329 async def _delete_session (self , session : Session ) -> None :
313330 async with self ._session_lock :
314- if session ._to_id in self ._sessions :
331+ existing_session = self ._sessions .get (session ._to_id )
332+ if existing_session is session :
315333 del self ._sessions [session ._to_id ]
0 commit comments