diff options
Diffstat (limited to 'embassy-executor/src/raw')
| -rw-r--r-- | embassy-executor/src/raw/mod.rs | 2 | ||||
| -rw-r--r-- | embassy-executor/src/raw/util.rs | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/embassy-executor/src/raw/mod.rs b/embassy-executor/src/raw/mod.rs index c1d82e18a..6d2c1c18a 100644 --- a/embassy-executor/src/raw/mod.rs +++ b/embassy-executor/src/raw/mod.rs | |||
| @@ -203,7 +203,7 @@ impl<F: Future + 'static> AvailableTask<F> { | |||
| 203 | fn initialize_impl<S>(self, future: impl FnOnce() -> F) -> SpawnToken<S> { | 203 | fn initialize_impl<S>(self, future: impl FnOnce() -> F) -> SpawnToken<S> { |
| 204 | unsafe { | 204 | unsafe { |
| 205 | self.task.raw.poll_fn.set(Some(TaskStorage::<F>::poll)); | 205 | self.task.raw.poll_fn.set(Some(TaskStorage::<F>::poll)); |
| 206 | self.task.future.write(future()); | 206 | self.task.future.write_in_place(future); |
| 207 | 207 | ||
| 208 | let task = TaskRef::new(self.task); | 208 | let task = TaskRef::new(self.task); |
| 209 | 209 | ||
diff --git a/embassy-executor/src/raw/util.rs b/embassy-executor/src/raw/util.rs index e2e8f4df8..c46085e45 100644 --- a/embassy-executor/src/raw/util.rs +++ b/embassy-executor/src/raw/util.rs | |||
| @@ -17,8 +17,9 @@ impl<T> UninitCell<T> { | |||
| 17 | &mut *self.as_mut_ptr() | 17 | &mut *self.as_mut_ptr() |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | pub unsafe fn write(&self, val: T) { | 20 | #[inline(never)] |
| 21 | ptr::write(self.as_mut_ptr(), val) | 21 | pub unsafe fn write_in_place(&self, func: impl FnOnce() -> T) { |
| 22 | ptr::write(self.as_mut_ptr(), func()) | ||
| 22 | } | 23 | } |
| 23 | 24 | ||
| 24 | pub unsafe fn drop_in_place(&self) { | 25 | pub unsafe fn drop_in_place(&self) { |
