Remove interrupt executor, remove PenderContext

This commit is contained in:
Dániel Buga
2023-08-14 15:59:47 +02:00
parent 3a51e2d9ca
commit 9954346143
8 changed files with 19 additions and 164 deletions

View File

@ -2,12 +2,12 @@ const THREAD_PENDER: usize = usize::MAX;
#[export_name = "__pender"]
#[cfg(any(feature = "executor-thread", feature = "executor-interrupt"))]
fn __pender(context: crate::raw::PenderContext) {
fn __pender(context: *mut ()) {
unsafe {
// Safety: `context` is either `usize::MAX` created by `Executor::run`, or a valid interrupt
// request number given to `InterruptExecutor::start`.
let context: usize = core::mem::transmute(context);
let context = context as usize;
#[cfg(feature = "executor-thread")]
if context == THREAD_PENDER {
@ -75,7 +75,7 @@ mod thread {
/// Create a new Executor.
pub fn new() -> Self {
Self {
inner: raw::Executor::new(unsafe { core::mem::transmute(THREAD_PENDER) }),
inner: raw::Executor::new(THREAD_PENDER as *mut ()),
not_send: PhantomData,
}
}
@ -205,10 +205,9 @@ mod interrupt {
}
unsafe {
let context = core::mem::transmute(irq.number() as usize);
(&mut *self.executor.get())
.as_mut_ptr()
.write(raw::Executor::new(context))
.write(raw::Executor::new(irq.number() as *mut ()))
}
let executor = unsafe { (&*self.executor.get()).assume_init_ref() };

View File

@ -17,7 +17,7 @@ mod thread {
static SIGNAL_WORK_THREAD_MODE: AtomicBool = AtomicBool::new(false);
#[export_name = "__pender"]
fn __thread_mode_pender(_context: crate::raw::PenderContext) {
fn __thread_mode_pender(_context: *mut ()) {
SIGNAL_WORK_THREAD_MODE.store(true, Ordering::SeqCst);
}
@ -31,7 +31,7 @@ mod thread {
/// Create a new Executor.
pub fn new() -> Self {
Self {
inner: raw::Executor::new(unsafe { core::mem::transmute(0) }),
inner: raw::Executor::new(core::ptr::null_mut()),
not_send: PhantomData,
}
}

View File

@ -14,7 +14,7 @@ mod thread {
use crate::{raw, Spawner};
#[export_name = "__pender"]
fn __pender(context: crate::raw::PenderContext) {
fn __pender(context: *mut ()) {
let signaler: &'static Signaler = unsafe { std::mem::transmute(context) };
signaler.signal()
}
@ -29,9 +29,9 @@ mod thread {
impl Executor {
/// Create a new Executor.
pub fn new() -> Self {
let signaler = &*Box::leak(Box::new(Signaler::new()));
let signaler = Box::leak(Box::new(Signaler::new()));
Self {
inner: raw::Executor::new(unsafe { std::mem::transmute(signaler) }),
inner: raw::Executor::new(signaler as *mut Signaler as *mut ()),
not_send: PhantomData,
signaler,
}

View File

@ -14,11 +14,10 @@ mod thread {
use wasm_bindgen::prelude::*;
use crate::raw::util::UninitCell;
use crate::raw::PenderContext;
use crate::{raw, Spawner};
#[export_name = "__thread_mode_pender"]
fn __thread_mode_pender(context: PenderContext) {
fn __thread_mode_pender(context: *mut ()) {
let signaler: &'static WasmContext = unsafe { std::mem::transmute(context) };
let _ = signaler.promise.then(unsafe { signaler.closure.as_mut() });
}
@ -47,9 +46,9 @@ mod thread {
impl Executor {
/// Create a new Executor.
pub fn new() -> Self {
let ctx = &*Box::leak(Box::new(WasmContext::new()));
let ctx = Box::leak(Box::new(WasmContext::new()));
Self {
inner: raw::Executor::new(unsafe { core::mem::transmute(ctx) }),
inner: raw::Executor::new(ctx as *mut WasmContext as *mut ()),
ctx,
not_send: PhantomData,
}

View File

@ -14,7 +14,7 @@ mod thread {
static SIGNAL_WORK_THREAD_MODE: AtomicBool = AtomicBool::new(false);
#[export_name = "__thread_mode_pender"]
fn __thread_mode_pender(_context: crate::raw::PenderContext) {
fn __thread_mode_pender(_context: *mut ()) {
SIGNAL_WORK_THREAD_MODE.store(true, Ordering::SeqCst);
}
@ -28,7 +28,7 @@ mod thread {
/// Create a new Executor.
pub fn new() -> Self {
Self {
inner: raw::Executor::new(unsafe { core::mem::transmute(0) }),
inner: raw::Executor::new(core::ptr::null_mut()),
not_send: PhantomData,
}
}