diff --git a/src/scheme/mod.rs b/src/scheme/mod.rs index bd30481320..67a438e3c6 100644 --- a/src/scheme/mod.rs +++ b/src/scheme/mod.rs @@ -233,6 +233,11 @@ impl SchemeList { /// Create a new scheme. fn insert(&self, context: Weak, token: &mut CleanLockToken) -> Result { + // Red Bear diagnostic (2026-07-15): capture the registrant pid before + // taking the handles lock, to correlate userspace scheme ids (e.g. the + // scheme=18 that randd's thr_fd resolves to in the boot crash) with the + // daemon that registered them. + let registrant_pid = context.upgrade().map(|c| c.read(token.token()).pid); let mut handles = handles().write(token.token()); let id = loop { let mut id = SCHEME_LIST_NEXT_ID.fetch_add(1, Ordering::Relaxed); @@ -249,6 +254,12 @@ impl SchemeList { } }; + error!( + "scheme.insert: scheme_id={} registrant_pid={:?}", + id.get(), + registrant_pid + ); + let root_id = SchemeId(SCHEME_LIST_ID.load(Ordering::Relaxed)); let inner = Arc::new(UserInner::new(root_id, id, context)); let new_scheme = Handle::Scheme(KernelSchemes::User(UserScheme::new(inner)));