From a232996fe84daf1639309fe3fca4796c7b91fa57 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Sun, 13 Jul 2025 11:00:41 +0200 Subject: [PATCH] Add missing OnClose handler in procmgr, fixes leak. --- bootstrap/src/procmgr.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/bootstrap/src/procmgr.rs b/bootstrap/src/procmgr.rs index c887b94077..1cfe6ca309 100644 --- a/bootstrap/src/procmgr.rs +++ b/bootstrap/src/procmgr.rs @@ -281,6 +281,11 @@ fn handle_scheme<'a>( Pending } } + RequestKind::OnClose { id } => { + scheme.on_close(id); + // no response associated + Pending + } RequestKind::SendFd(req) => Ready(scheme.on_sendfd(socket, req)), // ignore @@ -2398,6 +2403,11 @@ impl<'a> ProcScheme<'a> { dst.copy_from_slice(unsafe { plain::as_bytes(&front) }); Ok(()) } + fn on_close(&mut self, id: usize) { + if self.handles.try_remove(id).is_none() { + log::error!("on_close for nonexistent handle, id={id}"); + } + } fn pgrp_is_orphaned(&self, grp: ProcessId) -> Option { let group = self.groups.get(&grp)?.borrow(); @@ -2483,6 +2493,13 @@ impl<'a> ProcScheme<'a> { syscall::close(nextfd); nextfd }); + log::trace!("{} processes", self.processes.len()); + log::trace!("{} groups", self.groups.len()); + log::trace!("{} sessions", self.sessions.len()); + log::trace!("{} handles", self.handles.len()); + log::trace!("{} thread_lookup", self.thread_lookup.len()); + log::trace!("{} next_id", self.next_internal_id); + Ok(string.into_bytes()) }