Actually add to ProcessManager when spawning

This commit is contained in:
Luke Street 2025-10-04 14:12:24 -06:00
parent f4cd59b4e0
commit ffdfa38591
2 changed files with 10 additions and 3 deletions

View File

@ -168,7 +168,7 @@ namespace kernel32 {
UINT WIN_FUNC SetHandleCount(UINT uNumber) { UINT WIN_FUNC SetHandleCount(UINT uNumber) {
DEBUG_LOG("SetHandleCount(%u)\n", uNumber); DEBUG_LOG("SetHandleCount(%u)\n", uNumber);
(void)uNumber; (void)uNumber;
return (1u << 17) - 1; return 0x3FFE;
} }
DWORD WIN_FUNC FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD WIN_FUNC FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer,

View File

@ -1,8 +1,8 @@
#include "processes.h" #include "processes.h"
#include "common.h" #include "common.h"
#include "kernel32/internal.h"
#include "files.h" #include "files.h"
#include "handles.h" #include "handles.h"
#include "kernel32/internal.h"
#include <algorithm> #include <algorithm>
#include <cassert> #include <cassert>
#include <cstdio> #include <cstdio>
@ -123,6 +123,7 @@ bool ProcessManager::addProcess(Pin<ProcessObject> po) {
std::lock_guard lk(m); std::lock_guard lk(m);
mReg.emplace(pidfd, std::move(po)); mReg.emplace(pidfd, std::move(po));
} }
DEBUG_LOG("ProcessManager: tracking pidfd %d\n", pidfd);
wake(); wake();
return true; return true;
} }
@ -162,6 +163,8 @@ void ProcessManager::wake() const {
} }
void ProcessManager::checkPidfd(int pidfd) { void ProcessManager::checkPidfd(int pidfd) {
DEBUG_LOG("ProcessManager: checking pidfd %d\n", pidfd);
siginfo_t si{}; siginfo_t si{};
si.si_code = CLD_DUMPED; si.si_code = CLD_DUMPED;
if (pidfd >= 0) { if (pidfd >= 0) {
@ -176,6 +179,8 @@ void ProcessManager::checkPidfd(int pidfd) {
close(pidfd); close(pidfd);
} }
DEBUG_LOG("ProcessManager: pidfd %d exited: code=%d status=%d\n", pidfd, si.si_code, si.si_status);
Pin<ProcessObject> po; Pin<ProcessObject> po;
{ {
std::shared_lock lk(m); std::shared_lock lk(m);
@ -395,7 +400,9 @@ static int spawnInternal(const std::vector<std::string> &args, Pin<kernel32::Pro
return false; return false;
} }
pinOut = make_pin<kernel32::ProcessObject>(pid, pidfd); auto obj = make_pin<kernel32::ProcessObject>(pid, pidfd);
pinOut = obj.clone();
processes().addProcess(std::move(obj));
return 0; return 0;
} }