Code cleanup, make sure race conditions can't happen, at least in theory.

This commit is contained in:
Storm Dragon 2025-06-20 03:10:07 -04:00
parent f4ed8da4c3
commit 64e79f6945
3 changed files with 36 additions and 24 deletions

View File

@ -45,10 +45,14 @@ class driver(remoteDriver):
continue
if self.fenrirSock in r:
client_sock, client_addr = self.fenrirSock.accept()
# Ensure client socket is always closed to prevent resource leaks
try:
try:
rawdata = client_sock.recv(8129)
except Exception as e:
self.env['runtime']['debug'].writeDebugOut('unixDriver watchDog: Error receiving data from client: ' + str(e), debug.debugLevel.ERROR)
rawdata = b'' # Set default empty data if recv fails
try:
data = rawdata.decode("utf-8").rstrip().lstrip()
eventQueue.put({"Type":fenrirEventType.RemoteIncomming,
@ -56,6 +60,8 @@ class driver(remoteDriver):
})
except Exception as e:
self.env['runtime']['debug'].writeDebugOut('unixDriver watchDog: Error decoding/queuing data: ' + str(e), debug.debugLevel.ERROR)
finally:
# Always close client socket, even if data processing fails
try:
client_sock.close()
except Exception as e:

View File

@ -57,6 +57,9 @@ class driver(soundDriver):
return
self.cancel()
self.mainloop.quit()
# Wait for the GLib MainLoop thread to finish to prevent shutdown races
if hasattr(self, 'thread') and self.thread.is_alive():
self.thread.join(timeout=2.0) # 2 second timeout to prevent hanging
def _onPlayerMessage(self, bus, message):
if not self._initialized:

View File

@ -73,6 +73,7 @@ class driver(speechDriver):
return
self.clear_buffer()
self.lock.acquire(True)
try:
if self.proc:
try:
self.proc.terminate()
@ -83,6 +84,8 @@ class driver(speechDriver):
except Exception as e:
self.env['runtime']['debug'].writeDebugOut('speechDriver:Cancel:self.proc.kill():' + str(e),debug.debugLevel.WARNING)
self.proc = None
finally:
# Ensure lock is always released, even if process termination fails
self.lock.release()
def setCallback(self, callback):
print('SpeechDummyDriver: setCallback')