wasmer_wasix/syscalls/journal/actions/
close_thread.rs1use super::*;
2
3impl<'a> JournalSyscallPlayer<'a, '_> {
4 #[allow(clippy::result_large_err)]
5 pub(crate) unsafe fn action_close_thread(
6 &mut self,
7 id: u32,
8 exit_code: Option<ExitCode>,
9 differ_ethereal: Option<&mut Vec<JournalEntry<'a>>>,
10 ) -> Result<(), WasiRuntimeError> {
11 if id == self.ctx.data().tid().raw() {
12 tracing::trace!(%id, ?exit_code, "Replay journal - CloseThread(main)");
13 if self.bootstrapping {
14 self.clear_ethereal(differ_ethereal);
15 self.staged_differ_memory.clear();
16 self.differ_memory.clear();
17 self.rewind = None;
18 } else {
19 unsafe { JournalEffector::apply_process_exit(&mut self.ctx, exit_code) }
20 .map_err(anyhow_err_to_runtime_err)?;
21 }
22 } else if let Some(differ_ethereal) = differ_ethereal {
23 tracing::trace!(%id, ?exit_code, "Differ(end) journal - CloseThread");
24 differ_ethereal.push(JournalEntry::CloseThreadV1 { id, exit_code });
25 } else {
26 tracing::trace!(%id, ?exit_code, "Replay journal - CloseThread");
27 JournalEffector::apply_thread_exit(
28 &mut self.ctx,
29 Into::<WasiThreadId>::into(id),
30 exit_code,
31 )
32 .map_err(anyhow_err_to_runtime_err)?;
33 }
34 Ok(())
35 }
36}