wasmer_wasix/syscalls/journal/actions/
update_memory.rs

1use super::*;
2
3impl<'a> JournalSyscallPlayer<'a, '_> {
4    #[allow(clippy::result_large_err)]
5    pub(crate) unsafe fn action_update_compressed_memory(
6        &mut self,
7        region: Range<u64>,
8        compressed_data: Cow<'a, [u8]>,
9        differ_ethereal: Option<&mut Vec<JournalEntry<'a>>>,
10    ) -> Result<(), WasiRuntimeError> {
11        if Some(&self.cur_module_hash) != self.journal_module_hash.as_ref() {
12            tracing::trace!("Ignored journal - UpdateMemory");
13            return Ok(());
14        }
15
16        if self.bootstrapping {
17            tracing::trace!("Differ(stage) journal - UpdateMemory");
18            self.staged_differ_memory.push((region, compressed_data));
19        } else if let Some(differ_ethereal) = differ_ethereal {
20            tracing::trace!("Differ(ether) journal - UpdateMemory");
21            differ_ethereal.push(JournalEntry::UpdateMemoryRegionV1 {
22                region,
23                compressed_data,
24            });
25        } else {
26            tracing::trace!("Replay journal - UpdateMemory");
27            unsafe {
28                JournalEffector::apply_compressed_memory(&mut self.ctx, region, &compressed_data)
29            }
30            .map_err(anyhow_err_to_runtime_err)?;
31        }
32        Ok(())
33    }
34}