wasmer_wasix/syscalls/journal/actions/
close_thread.rs

1use 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}