Skip to content

Commit 0de5a48

Browse files
committed
speech: add awful hack around Python threading problem
MAV> Detected vehicle 1:1 on link 0 Using speech backend 'speechd' Traceback (most recent call last): File "/usr/lib/python3.10/multiprocessing/queues.py", line 244, in _feed obj = _ForkingPickler.dumps(obj) File "/usr/lib/python3.10/multiprocessing/reduction.py", line 51, in dumps cls(buf, protocol).dump(obj) File "/usr/lib/python3.10/multiprocessing/connection.py", line 968, in reduce_connection df = reduction.DupFd(conn.fileno()) File "/usr/lib/python3.10/multiprocessing/connection.py", line 170, in fileno self._check_closed() File "/usr/lib/python3.10/multiprocessing/connection.py", line 136, in _check_closed raise OSError("handle is closed") OSError: handle is closed
1 parent d8a2ab5 commit 0de5a48

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

Diff for: MAVProxy/modules/mavproxy_speech.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,9 @@ def __init__(self, mpstate):
167167
self.settings.set('speech_voice', '')
168168
except AttributeError:
169169
self.settings.append(('speech_voice', str, ''))
170-
self.settings.set_callback(self.settings_callback)
171170
self.backend = SpeechBackend(self.settings)
171+
self.settings_set_callback_installed = False
172+
self.settings_set_callback_delay = None
172173

173174
def settings_callback(self, setting):
174175
'''handle changes in settings'''
@@ -214,6 +215,21 @@ def cmd_speech(self, args):
214215
if args[0] == "list_voices":
215216
self.backend.send(SpeechCommandListVoices())
216217

218+
def idle_task(self):
219+
if not self.settings_set_callback_installed:
220+
now = time.time()
221+
if self.settings_set_callback_delay is None:
222+
self.settings_set_callback_delay_start = now
223+
if now - self.settings_set_callback_delay_start < 1:
224+
return
225+
self.settings_set_callback_delay = None
226+
227+
try:
228+
self.settings.set_callback(self.settings_callback)
229+
self.settings_set_callback_installed = True
230+
except Exception as ex:
231+
print("Caught exception (%s)" % str(ex))
232+
217233
def init(mpstate):
218234
'''initialise module'''
219235
return SpeechModule(mpstate)

0 commit comments

Comments
 (0)