diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-28 12:58:42 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-28 12:58:42 +0200 |
| commit | 2497055f6315e3dd2af7422cba3dde51db5c7d82 (patch) | |
| tree | a1bcc471a8283fe58d36575cb77a8083aea4b9f5 | |
| parent | 183dfe3ae34418653aca3d20628b3938c8348c2a (diff) | |
| download | desktop-assistant-2497055f6315e3dd2af7422cba3dde51db5c7d82.tar.gz desktop-assistant-2497055f6315e3dd2af7422cba3dde51db5c7d82.zip | |
Let arecord die with the assistant
It was the only child started without PR_SET_PDEATHSIG. The assistant
died with no log line and left arecord recording into the unlinked raw
file for ~76 minutes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| -rw-r--r-- | AGENTS.md | 4 | ||||
| -rw-r--r-- | assistant.py | 2 |
2 files changed, 5 insertions, 1 deletions
@@ -303,6 +303,10 @@ drives `arecord` on/off, clip POSTed to `/inference`. `prctl(PR_SET_PDEATHSIG, SIGTERM)` via ctypes in `preexec_fn`: they die with the assistant even on SIGKILL or a kill during startup (tested). Python's default SIGTERM skips `finally`; a handler calls `sys.exit`. +- 2026-09-28: `arecord` lacked it. The assistant died with no log line + (last: "ready, mic is on", cause unknown) and left `arecord` recording + into the unlinked raw file for ~76 min. It now gets `die_with_parent` + too (not yet tested live); `assistant.sh status` lists a stray one. - Gemma confidently gave a wrong fact (a city-to-city distance off by ~10x). No tools yet, so no time/weather/facts lookup. - Recordings live in `$XDG_RUNTIME_DIR` and are deleted on exit. diff --git a/assistant.py b/assistant.py index 2a84cd6..a6d83f4 100644 --- a/assistant.py +++ b/assistant.py @@ -661,7 +661,7 @@ def main(): # default (~125 ms) left the user's waves at 8 levels a second. rec = subprocess.Popen(["arecord", "-q", "-t", "raw", "-f", "S16_LE", "-r", "16000", "-c", "1", "--period-time=33333", RAW], - stderr=subprocess.DEVNULL) + stderr=subprocess.DEVNULL, preexec_fn=die_with_parent) threading.Thread(target=user_levels, args=(rec, turn), daemon=True).start() elif rec: rec.send_signal(signal.SIGINT) |
