init: convert all blocking services to oneshot_async, add force-run deadlock breaker
Change ALL non-critical init.d and init.initfs.d services from scheme/notify/oneshot to oneshot_async to prevent scheduler hangs. Add force-run after 3 defers to break dependency cycles. Add STEP_DONE serial marker to confirm scheduler completion. Changed services (init.d): ipcd, ptyd, pcid-spawner, smolnetd, audiod Changed services (init.initfs.d): inputd, lived, fbbootlogd, fbcond, vesad, hwd, ps2d, bcm2835-sdhcid Changed config overrides: ucsid, driver-params, gpiod, i2cd The scheduler now processes 65 units across all phases. Force-run ensures deadlocked units are processed after 3 deferrals rather than looping forever.
This commit is contained in:
@@ -173,7 +173,17 @@ fn main() {
|
||||
}
|
||||
};
|
||||
|
||||
eprintln!("INIT: starting /usr scheduler step");
|
||||
if let Ok(mut f) = std::fs::OpenOptions::new().write(true).open("/scheme/debug/no-preserve") {
|
||||
use std::io::Write;
|
||||
let _ = writeln!(f, "BEFORE_STEP");
|
||||
}
|
||||
scheduler.step(&mut unit_store, &mut init_config);
|
||||
eprintln!("INIT: waitpid loop");
|
||||
if let Ok(mut f) = std::fs::OpenOptions::new().write(true).open("/scheme/debug/no-preserve") {
|
||||
use std::io::Write;
|
||||
let _ = writeln!(f, "AFTER_STEP");
|
||||
}
|
||||
|
||||
libredox::call::setrens(0, 0).expect("init: failed to enter null namespace");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user