rust_rcs_core/ffi/
async.rs1use std::{
2 sync::{Arc, Mutex},
3 task::Waker,
4};
5
6pub struct WakerHandle {
7 pub(crate) waker: Arc<Mutex<Option<Waker>>>,
8}
9
10impl WakerHandle {
11 pub(crate) fn new(waker: &Waker) -> WakerHandle {
12 let waker = waker.clone();
13 WakerHandle {
14 waker: Arc::new(Mutex::new(Some(waker))),
15 }
16 }
17}
18
19#[no_mangle]
20pub unsafe extern "C" fn rust_async_wake_up(handle: *mut WakerHandle) {
21 if let Some(handle) = handle.as_mut() {
22 let mut guard = handle.waker.lock().unwrap();
23 if let Some(waker) = guard.take() {
24 waker.wake();
25 }
26 }
27}
28
29#[no_mangle]
30pub unsafe extern "C" fn rust_async_destroy_waker(handle: *mut WakerHandle) {
31 let _ = Box::from_raw(handle);
32}