wasmer_wasix/syscalls/wasix/
callback_signal.rs1use super::*;
2use crate::syscalls::*;
3
4#[instrument(level = "trace", skip_all, fields(name = field::Empty, funct_is_some = field::Empty), ret)]
11pub fn callback_signal<M: MemorySize>(
12 mut ctx: FunctionEnvMut<'_, WasiEnv>,
13 name: WasmPtr<u8, M>,
14 name_len: M::Offset,
15) -> Result<(), WasiError> {
16 let env = ctx.data();
17 let memory = unsafe { env.memory_view(&ctx) };
18 let name = match name.read_utf8_string(&memory, name_len) {
19 Ok(a) => a,
20 Err(err) => {
21 warn!(
22 "failed to access memory that holds the name of the signal callback: {}",
23 err
24 );
25 return Ok(());
26 }
27 };
28 Span::current().record("name", name.as_str());
29
30 let funct = env
31 .inner()
32 .main_module_instance_handles()
33 .instance
34 .exports
35 .get_typed_function(&ctx, &name)
36 .ok();
37 Span::current().record("funct_is_some", funct.is_some());
38
39 {
40 let mut env_inner = ctx.data_mut().inner_mut();
41 let inner = env_inner.main_module_instance_handles_mut();
42 inner.signal = funct;
43 inner.signal_set = true;
44 }
45
46 WasiEnv::do_pending_operations(&mut ctx)?;
47
48 Ok(())
49}