From 362be00d074ba72cda27dafb85e0f590566a2543 Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Wed, 29 Oct 2025 11:52:19 -0700 Subject: [PATCH] avoid deadlock on exec --- src/main.zig | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main.zig b/src/main.zig index ad92bc5..3e32ecd 100644 --- a/src/main.zig +++ b/src/main.zig @@ -48,9 +48,14 @@ const SpeechHandler = struct { }) catch std.log.warn("Caught error writing speech data to stdout", .{}); // Execute program if specified - if (self.exec_program) |program| self.exec(event.text) catch |err| { - std.log.err("Failed to execute program '{s}': {}", .{ program, err }); - }; + if (self.exec_program) |program| { + self.exec(event.text) catch |err| { + std.log.err("Failed to execute program '{s}': {}", .{ program, err }); + }; + self.reclaimProcessesPosix(false) catch |err| { + std.log.err("Failed to reclaim processes: {}", .{err}); + }; + } } fn exec(self: *SpeechHandler, text: []const u8) !void { const program = self.exec_program.?; // should only be called when exec_program is not null @@ -78,7 +83,6 @@ const SpeechHandler = struct { try process.child.?.spawn(); try process.child.?.waitForSpawn(); process.id = process.child.?.id; - try self.reclaimProcessesPosix(false); } fn reclaimProcessesPosix(self: *SpeechHandler, reap_all: bool) !void {