1 //! Unix-specific extension for the `wasmtime` crate. 2 //! 3 //! This module is only available on Unix targets, for example Linux. Note that 4 //! this module is notably not available on macOS or Windows. Note that the 5 //! import path for this module is `wasmtime::unix::...`, which is intended to 6 //! emphasize that it is platform-specific. 7 //! 8 //! The traits contained in this module are intended to extend various types 9 //! throughout the `wasmtime` crate with extra functionality that's only 10 //! available on Unix. 11 12 #[cfg(has_native_signals)] 13 use crate::AsContextMut; 14 use crate::Store; 15 #[cfg(has_native_signals)] 16 use crate::prelude::*; 17 18 /// Extensions for the [`Store`] type only available on Unix. 19 pub trait StoreExt { 20 // TODO: needs more docs? 21 /// The signal handler must be 22 /// [async-signal-safe](http://man7.org/linux/man-pages/man7/signal-safety.7.html). 23 #[cfg(has_native_signals)] set_signal_handler<H>(&mut self, handler: H) where H: 'static + Fn(libc::c_int, *const libc::siginfo_t, *const libc::c_void) -> bool + Send + Sync24 unsafe fn set_signal_handler<H>(&mut self, handler: H) 25 where 26 H: 'static 27 + Fn(libc::c_int, *const libc::siginfo_t, *const libc::c_void) -> bool 28 + Send 29 + Sync; 30 } 31 32 impl<T> StoreExt for Store<T> { 33 #[cfg(has_native_signals)] set_signal_handler<H>(&mut self, handler: H) where H: 'static + Fn(libc::c_int, *const libc::siginfo_t, *const libc::c_void) -> bool + Send + Sync,34 unsafe fn set_signal_handler<H>(&mut self, handler: H) 35 where 36 H: 'static 37 + Fn(libc::c_int, *const libc::siginfo_t, *const libc::c_void) -> bool 38 + Send 39 + Sync, 40 { 41 self.as_context_mut() 42 .0 43 .set_signal_handler(Some(Box::new(handler))); 44 } 45 } 46