feat(init): spawn service over IPC with per-client allowance refunded on child death; up to 4 death watchers; spawntest on test image
This commit is contained in:
@@ -7,6 +7,7 @@ mod launch;
|
||||
mod load;
|
||||
mod manifest;
|
||||
mod selftest;
|
||||
mod spawn;
|
||||
|
||||
use libkos::fs::Storage;
|
||||
use libkos::syscall;
|
||||
@@ -39,21 +40,31 @@ pub fn run() -> ! {
|
||||
idle();
|
||||
};
|
||||
|
||||
let mut launcher = launch::Launcher::new(&mut storage, scratch, found);
|
||||
let mut launcher = match launch::Launcher::new(&mut storage, scratch, found) {
|
||||
Ok(l) => l,
|
||||
Err(why) => {
|
||||
libkos::println!("init: {}", why);
|
||||
idle();
|
||||
}
|
||||
};
|
||||
launch_all(&mut launcher, manifest::SERVERS);
|
||||
give_storage_the_log();
|
||||
|
||||
// The test image carries the SMP self-test; it runs instead of the
|
||||
// desktop and halts the machine.
|
||||
// The test image carries the SMP self-test; it and the tests run
|
||||
// instead of the desktop, and the last one halts the machine.
|
||||
let (storage, scratch) = launcher.storage();
|
||||
if storage.open(b"smptest.elf").is_ok_and(|h| storage.close(h).is_ok()) {
|
||||
libkos::println!("init: running the SMP self-test");
|
||||
selftest::run(storage, scratch);
|
||||
launch_all(&mut launcher, manifest::TESTS);
|
||||
} else {
|
||||
launch_all(&mut launcher, manifest::APPS);
|
||||
}
|
||||
launch_all(&mut launcher, manifest::APPS);
|
||||
|
||||
libkos::println!("init: all loaded, supervising");
|
||||
idle();
|
||||
libkos::println!("init: all loaded, serving spawns");
|
||||
let _ = syscall::bind_notification(launcher.deaths);
|
||||
let ep = launcher.spawn_ep;
|
||||
server_framework::serve(&mut launcher, ep)
|
||||
}
|
||||
|
||||
fn launch_all(launcher: &mut launch::Launcher, programs: &[manifest::Program]) {
|
||||
|
||||
Reference in New Issue
Block a user