diff options
| author | Dan Engelbrecht <[email protected]> | 2026-04-01 14:05:11 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-04-01 14:05:11 +0200 |
| commit | 7c4d98f09e1129ed3f7e188fdc31c305f919b2c5 (patch) | |
| tree | 98ee6187024e7cc43b539754c7f1f9db47725dd2 /src/zenutil | |
| parent | consul env token refresh (#912) (diff) | |
| download | zen-7c4d98f09e1129ed3f7e188fdc31c305f919b2c5.tar.xz zen-7c4d98f09e1129ed3f7e188fdc31c305f919b2c5.zip | |
fix fork() issues on linux and MacOS (#910)
- Improvement: Hub child process spawning on macOS now uses `posix_spawn` in line with Apple recommendations
- Bugfix: Hub child process spawning on Linux now uses `vfork` instead of `fork`, preventing ENOMEM failures on systems with strict memory overcommit (`vm.overcommit_memory=2`)
- Bugfix: Fixed process group management on POSIX; child processes were not placed into the correct process group, breaking group-wide signal delivery
Diffstat (limited to 'src/zenutil')
| -rw-r--r-- | src/zenutil/cloud/minioprocess.cpp | 2 | ||||
| -rw-r--r-- | src/zenutil/consul/consul.cpp | 2 | ||||
| -rw-r--r-- | src/zenutil/process/subprocessmanager.cpp | 6 |
3 files changed, 7 insertions, 3 deletions
diff --git a/src/zenutil/cloud/minioprocess.cpp b/src/zenutil/cloud/minioprocess.cpp index 457453bd8..e146f6677 100644 --- a/src/zenutil/cloud/minioprocess.cpp +++ b/src/zenutil/cloud/minioprocess.cpp @@ -45,7 +45,7 @@ struct MinioProcess::Impl } CreateProcOptions Options; - Options.Flags |= CreateProcOptions::Flag_Windows_NewProcessGroup; + Options.Flags |= CreateProcOptions::Flag_NewProcessGroup; Options.Environment.emplace_back("MINIO_ROOT_USER", m_Options.RootUser); Options.Environment.emplace_back("MINIO_ROOT_PASSWORD", m_Options.RootPassword); diff --git a/src/zenutil/consul/consul.cpp b/src/zenutil/consul/consul.cpp index ad1b92b38..c0cea20c0 100644 --- a/src/zenutil/consul/consul.cpp +++ b/src/zenutil/consul/consul.cpp @@ -31,7 +31,7 @@ struct ConsulProcess::Impl } CreateProcOptions Options; - Options.Flags |= CreateProcOptions::Flag_Windows_NewProcessGroup; + Options.Flags |= CreateProcOptions::Flag_NewProcessGroup; const std::filesystem::path ConsulExe = GetRunningExecutablePath().parent_path() / ("consul" ZEN_EXE_SUFFIX_LITERAL); CreateProcResult Result = CreateProc(ConsulExe, "consul" ZEN_EXE_SUFFIX_LITERAL " agent -dev", Options); diff --git a/src/zenutil/process/subprocessmanager.cpp b/src/zenutil/process/subprocessmanager.cpp index b053ac6bd..e908dd63a 100644 --- a/src/zenutil/process/subprocessmanager.cpp +++ b/src/zenutil/process/subprocessmanager.cpp @@ -903,7 +903,11 @@ ProcessGroup::Impl::Spawn(const std::filesystem::path& Executable, Options.AssignToJob = &m_JobObject; } #else - if (m_Pgid > 0) + if (m_Pgid == 0) + { + Options.Flags |= CreateProcOptions::Flag_NewProcessGroup; + } + else { Options.ProcessGroupId = m_Pgid; } |