wasmer_wasix/journal/effector/
process_exit.rs1use virtual_mio::InlineWaker;
2
3use super::*;
4
5impl JournalEffector {
6 pub fn save_process_exit(env: &WasiEnv, exit_code: Option<ExitCode>) -> anyhow::Result<()> {
7 env.active_journal()?
8 .write(JournalEntry::ProcessExitV1 { exit_code })
9 .map_err(map_snapshot_err)?;
10 Ok(())
11 }
12
13 pub unsafe fn apply_process_exit(
19 ctx: &mut FunctionEnvMut<'_, WasiEnv>,
20 exit_code: Option<ExitCode>,
21 ) -> anyhow::Result<()> {
22 let env = ctx.data();
23 if env.replaying_journal {
27 let state = env.state.clone();
28 InlineWaker::block_on(state.fs.close_all());
29 } else {
30 env.blocking_on_exit(exit_code);
31 }
32
33 let memory = ctx
35 .data()
36 .inner()
37 .main_module_instance_handles()
38 .memory()
39 .clone();
40 memory.reset(ctx)?;
41 Ok(())
42 }
43}