From ffdfa385915fb73612cc2045e45b64652b11f6c7 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Sat, 4 Oct 2025 14:12:24 -0600 Subject: [PATCH] Actually add to ProcessManager when spawning --- dll/kernel32/winbase.cpp | 2 +- src/processes.cpp | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/dll/kernel32/winbase.cpp b/dll/kernel32/winbase.cpp index 735be30..d07bb78 100644 --- a/dll/kernel32/winbase.cpp +++ b/dll/kernel32/winbase.cpp @@ -168,7 +168,7 @@ namespace kernel32 { UINT WIN_FUNC SetHandleCount(UINT uNumber) { DEBUG_LOG("SetHandleCount(%u)\n", uNumber); (void)uNumber; - return (1u << 17) - 1; + return 0x3FFE; } DWORD WIN_FUNC FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, diff --git a/src/processes.cpp b/src/processes.cpp index 49560b1..0da23b2 100644 --- a/src/processes.cpp +++ b/src/processes.cpp @@ -1,8 +1,8 @@ #include "processes.h" #include "common.h" -#include "kernel32/internal.h" #include "files.h" #include "handles.h" +#include "kernel32/internal.h" #include #include #include @@ -123,6 +123,7 @@ bool ProcessManager::addProcess(Pin po) { std::lock_guard lk(m); mReg.emplace(pidfd, std::move(po)); } + DEBUG_LOG("ProcessManager: tracking pidfd %d\n", pidfd); wake(); return true; } @@ -162,6 +163,8 @@ void ProcessManager::wake() const { } void ProcessManager::checkPidfd(int pidfd) { + DEBUG_LOG("ProcessManager: checking pidfd %d\n", pidfd); + siginfo_t si{}; si.si_code = CLD_DUMPED; if (pidfd >= 0) { @@ -176,6 +179,8 @@ void ProcessManager::checkPidfd(int pidfd) { close(pidfd); } + DEBUG_LOG("ProcessManager: pidfd %d exited: code=%d status=%d\n", pidfd, si.si_code, si.si_status); + Pin po; { std::shared_lock lk(m); @@ -395,7 +400,9 @@ static int spawnInternal(const std::vector &args, Pin(pid, pidfd); + auto obj = make_pin(pid, pidfd); + pinOut = obj.clone(); + processes().addProcess(std::move(obj)); return 0; }