aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/src/spawner.rs
diff options
context:
space:
mode:
authorsander <[email protected]>2023-03-30 14:37:51 +0200
committersander <[email protected]>2023-03-30 14:37:51 +0200
commit6b2aaacf830d69fcb05f9611d3780f56b4ae82bc (patch)
treea6e4d7628cd5153bbfd122b902a598b0862feeb9 /embassy-executor/src/spawner.rs
parentba9afbc26d06ab38065cbff5b17a7f76db297ad4 (diff)
parent754bb802ba377c19be97d092c4b2afe542de20b5 (diff)
Update embassy
Merge commit '9dd3719f09835f646e3a8f3abaa33726a1e3f9ca'
Diffstat (limited to 'embassy-executor/src/spawner.rs')
-rw-r--r--embassy-executor/src/spawner.rs12
1 files changed, 4 insertions, 8 deletions
diff --git a/embassy-executor/src/spawner.rs b/embassy-executor/src/spawner.rs
index 7c0a0183c..2b6224045 100644
--- a/embassy-executor/src/spawner.rs
+++ b/embassy-executor/src/spawner.rs
@@ -92,6 +92,7 @@ impl Spawner {
92 poll_fn(|cx| { 92 poll_fn(|cx| {
93 let task = raw::task_from_waker(cx.waker()); 93 let task = raw::task_from_waker(cx.waker());
94 let executor = unsafe { task.header().executor.get().unwrap_unchecked() }; 94 let executor = unsafe { task.header().executor.get().unwrap_unchecked() };
95 let executor = unsafe { raw::Executor::wrap(executor) };
95 Poll::Ready(Self::new(executor)) 96 Poll::Ready(Self::new(executor))
96 }) 97 })
97 .await 98 .await
@@ -130,9 +131,7 @@ impl Spawner {
130 /// spawner to other threads, but the spawner loses the ability to spawn 131 /// spawner to other threads, but the spawner loses the ability to spawn
131 /// non-Send tasks. 132 /// non-Send tasks.
132 pub fn make_send(&self) -> SendSpawner { 133 pub fn make_send(&self) -> SendSpawner {
133 SendSpawner { 134 SendSpawner::new(&self.executor.inner)
134 executor: self.executor,
135 }
136 } 135 }
137} 136}
138 137
@@ -145,14 +144,11 @@ impl Spawner {
145/// If you want to spawn non-Send tasks, use [Spawner]. 144/// If you want to spawn non-Send tasks, use [Spawner].
146#[derive(Copy, Clone)] 145#[derive(Copy, Clone)]
147pub struct SendSpawner { 146pub struct SendSpawner {
148 executor: &'static raw::Executor, 147 executor: &'static raw::SyncExecutor,
149} 148}
150 149
151unsafe impl Send for SendSpawner {}
152unsafe impl Sync for SendSpawner {}
153
154impl SendSpawner { 150impl SendSpawner {
155 pub(crate) fn new(executor: &'static raw::Executor) -> Self { 151 pub(crate) fn new(executor: &'static raw::SyncExecutor) -> Self {
156 Self { executor } 152 Self { executor }
157 } 153 }
158 154