wasmer_wasix/syscalls/wasix/
thread_parallelism.rs

1use super::*;
2use crate::syscalls::*;
3
4/// ### `thread_parallelism()`
5/// Returns the available parallelism which is normally the
6/// number of available cores that can run concurrently
7#[instrument(level = "trace", skip_all, fields(parallelism = field::Empty), ret)]
8pub fn thread_parallelism<M: MemorySize>(
9    ctx: FunctionEnvMut<'_, WasiEnv>,
10    ret_parallelism: WasmPtr<M::Offset, M>,
11) -> Errno {
12    let env = ctx.data();
13    let parallelism = wasi_try!(env.tasks().thread_parallelism().map_err(|err| {
14        let err: Errno = err.into();
15        err
16    }));
17    Span::current().record("parallelism", parallelism);
18    let parallelism: M::Offset = wasi_try!(parallelism.try_into().map_err(|_| Errno::Overflow));
19    let memory = unsafe { env.memory_view(&ctx) };
20    wasi_try_mem!(ret_parallelism.write(&memory, parallelism));
21    Errno::Success
22}