From 3e519c813c8752834450b7584b95b3245a443953 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 23 Sep 2026 22:19:37 -0400 Subject: [PATCH] linux: stop ignoring SIGCHLD process-wide Element set SIGCHLD to SIG_IGN on Linux to avoid zombie scanner processes. That makes the kernel auto-reap every child, so any code in the process that calls waitpid() gets ECHILD. yabridge spawns a wine helper while loading a bridged plugin and asserts on that failure, which crashed the scanner and the main app for every Windows plugin. The scanner is launched through juce::ChildProcessManager, which polls and reaps its children itself, so the workaround is no longer needed. Fixes #1149 --- src/context.cpp | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/context.cpp b/src/context.cpp index ffdd2a863..c6c413296 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -21,23 +21,6 @@ namespace element { -namespace detail { -inline static void setupChildProcessHandlers (RunMode mode) -{ - if (mode == RunMode::Plugin) - return; -#if JUCE_LINUX - // JUCE allows zombie processes... this prevents them as a workaround. - static bool _init = false; - if (! _init) - { - _init = true; - signal (SIGCHLD, SIG_IGN); - } -#endif -} -} // namespace detail - class Context::Impl { public: @@ -109,7 +92,6 @@ class Context::Impl Context::Context (RunMode mode, const String& _cli) { impl.reset (new Impl (*this, mode)); - detail::setupChildProcessHandlers (mode); impl->init(); }