Fix deadlock on STT service stop
This commit is contained in:
@@ -176,14 +176,16 @@ class SonioxSTTService(STTService):
|
|||||||
await self._websocket.close()
|
await self._websocket.close()
|
||||||
self._websocket = None
|
self._websocket = None
|
||||||
|
|
||||||
if self._receive_task:
|
|
||||||
await self.wait_for_task(self._receive_task)
|
|
||||||
self._receive_task = None
|
|
||||||
|
|
||||||
if self._finalize_if_no_tokens_task:
|
if self._finalize_if_no_tokens_task:
|
||||||
await self.cancel_task(self._finalize_if_no_tokens_task)
|
await self.cancel_task(self._finalize_if_no_tokens_task)
|
||||||
self._finalize_if_no_tokens_task = None
|
self._finalize_if_no_tokens_task = None
|
||||||
|
|
||||||
|
if self._receive_task:
|
||||||
|
# Task cannot cancel itself. If task called _cleanup() we expect it to cancel itself.
|
||||||
|
if self._receive_task != asyncio.current_task():
|
||||||
|
await self.wait_for_task(self._receive_task)
|
||||||
|
self._receive_task = None
|
||||||
|
|
||||||
async def stop(self, frame: EndFrame):
|
async def stop(self, frame: EndFrame):
|
||||||
"""Stop the Soniox STT websocket connection.
|
"""Stop the Soniox STT websocket connection.
|
||||||
|
|
||||||
@@ -323,6 +325,7 @@ class SonioxSTTService(STTService):
|
|||||||
await send_endpoint_transcript()
|
await send_endpoint_transcript()
|
||||||
logger.debug("Transcription finished.")
|
logger.debug("Transcription finished.")
|
||||||
await self._cleanup()
|
await self._cleanup()
|
||||||
|
return
|
||||||
|
|
||||||
except websockets.exceptions.ConnectionClosed:
|
except websockets.exceptions.ConnectionClosed:
|
||||||
# Expected when closing the connection.
|
# Expected when closing the connection.
|
||||||
|
|||||||
Reference in New Issue
Block a user