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:
Red Bear OS
2026-07-04 01:06:52 +03:00
parent 4a1d1f4576
commit 4bfb878b55
15 changed files with 41 additions and 23 deletions
+10
View File
@@ -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");