Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions kinode/src/kernel/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -468,12 +468,6 @@ async fn handle_kernel_request(
return;
}
};
let _ = send_to_terminal
.send(t::Printout {
verbosity: 2,
content: format!("killing process {process_id}"),
})
.await;
process_handle.abort();
process_map.remove(&process_id);
caps_oracle
Expand All @@ -484,6 +478,12 @@ async fn handle_kernel_request(
.await
.expect("event loop: fatal: sender died");
if request.expects_response.is_none() {
let _ = send_to_terminal
.send(t::Printout {
verbosity: 2,
content: format!("killing process {process_id}"),
})
.await;
return;
}
let _ = send_to_terminal
Expand Down Expand Up @@ -716,18 +716,19 @@ pub async fn kernel(
let mut is_debug: bool = false;
let mut reboot_processes: Vec<(t::ProcessId, StartProcessMetadata, Vec<u8>)> = vec![];

// filter out OnExit::None processes from process_map
process_map.retain(|_, persisted| !persisted.on_exit.is_none());

for (process_id, persisted) in &process_map {
// runtime extensions will have a bytes_handle of "", because they have no
// WASM code saved in filesystem.
if persisted.on_exit.is_restart() && !persisted.wasm_bytes_handle.is_empty() {
// read wasm bytes directly from vfs
// start process.
let wasm_bytes = match tokio::fs::read(format!(
"{}/{}",
vfs_path, persisted.wasm_bytes_handle
))
.await
{
if persisted.wasm_bytes_handle.is_empty() {
continue;
}
// read wasm bytes directly from vfs
// start process.
let wasm_bytes =
match tokio::fs::read(format!("{}/{}", vfs_path, persisted.wasm_bytes_handle)).await {
Ok(bytes) => bytes,
Err(e) => {
let _ = send_to_terminal
Expand All @@ -742,20 +743,19 @@ pub async fn kernel(
continue;
}
};
reboot_processes.push((
process_id.clone(),
StartProcessMetadata {
source: t::Address {
node: our.name.clone(),
process: KERNEL_PROCESS_ID.clone(),
},
process_id: process_id.clone(),
persisted: persisted.clone(),
reboot: true,
reboot_processes.push((
process_id.clone(),
StartProcessMetadata {
source: t::Address {
node: our.name.clone(),
process: KERNEL_PROCESS_ID.clone(),
},
wasm_bytes,
));
}
process_id: process_id.clone(),
persisted: persisted.clone(),
reboot: true,
},
wasm_bytes,
));
if let t::OnExit::Requests(requests) = &persisted.on_exit {
// if a persisted process had on-death-requests, we should perform them now
// even in death, a process can only message processes it has capabilities for
Expand Down
3 changes: 3 additions & 0 deletions kinode/src/kernel/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -646,6 +646,9 @@ pub async fn make_process_loop(
// the process has completed, time to perform cleanup
//

// update metadata to what was mutated by process in store
let metadata = store.data().process.metadata.to_owned();

let our_kernel = t::Address {
node: metadata.our.node.clone(),
process: KERNEL_PROCESS_ID.clone(),
Expand Down
8 changes: 8 additions & 0 deletions lib/src/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,14 @@ impl OnExit {
}
}

pub fn is_none(&self) -> bool {
match self {
OnExit::None => true,
OnExit::Restart => false,
OnExit::Requests(_) => false,
}
}

pub fn en_wit(&self) -> wit::OnExit {
match self {
OnExit::None => wit::OnExit::None,
Expand Down