aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/src/arch/std.rs
diff options
context:
space:
mode:
authorxoviat <[email protected]>2023-08-22 16:58:43 -0500
committerxoviat <[email protected]>2023-08-22 16:58:43 -0500
commit7d6edd7b15d2209ac0b96ff8814ecefce2964e36 (patch)
tree7988a9b46855ac187a92cbfc5f38cbbbff695e8d /embassy-executor/src/arch/std.rs
parent9e3266b74554ea397bdd963ff12a26aa51e77b63 (diff)
parent7bff2ebab3b36cc922505e9db961840109c509ed (diff)
Merge branch 'main' of https://github.com/embassy-rs/embassy into rtc-lp
Diffstat (limited to 'embassy-executor/src/arch/std.rs')
-rw-r--r--embassy-executor/src/arch/std.rs17
1 files changed, 6 insertions, 11 deletions
diff --git a/embassy-executor/src/arch/std.rs b/embassy-executor/src/arch/std.rs
index 4e4a178f0..5b2f7e2e4 100644
--- a/embassy-executor/src/arch/std.rs
+++ b/embassy-executor/src/arch/std.rs
@@ -11,17 +11,12 @@ mod thread {
11 #[cfg(feature = "nightly")] 11 #[cfg(feature = "nightly")]
12 pub use embassy_macros::main_std as main; 12 pub use embassy_macros::main_std as main;
13 13
14 use crate::raw::{Pender, PenderInner};
15 use crate::{raw, Spawner}; 14 use crate::{raw, Spawner};
16 15
17 #[derive(Copy, Clone)] 16 #[export_name = "__pender"]
18 pub(crate) struct ThreadPender(&'static Signaler); 17 fn __pender(context: *mut ()) {
19 18 let signaler: &'static Signaler = unsafe { std::mem::transmute(context) };
20 impl ThreadPender { 19 signaler.signal()
21 #[allow(unused)]
22 pub(crate) fn pend(self) {
23 self.0.signal()
24 }
25 } 20 }
26 21
27 /// Single-threaded std-based executor. 22 /// Single-threaded std-based executor.
@@ -34,9 +29,9 @@ mod thread {
34 impl Executor { 29 impl Executor {
35 /// Create a new Executor. 30 /// Create a new Executor.
36 pub fn new() -> Self { 31 pub fn new() -> Self {
37 let signaler = &*Box::leak(Box::new(Signaler::new())); 32 let signaler = Box::leak(Box::new(Signaler::new()));
38 Self { 33 Self {
39 inner: raw::Executor::new(Pender(PenderInner::Thread(ThreadPender(signaler)))), 34 inner: raw::Executor::new(signaler as *mut Signaler as *mut ()),
40 not_send: PhantomData, 35 not_send: PhantomData,
41 signaler, 36 signaler,
42 } 37 }