diff options
| author | Hailey Somerville <[email protected]> | 2023-09-14 13:03:38 +1000 |
|---|---|---|
| committer | Hailey Somerville <[email protected]> | 2023-09-14 13:42:11 +1000 |
| commit | 3a1ed823f87d6e823763419245d229a0edb09db8 (patch) | |
| tree | b5b30fabc92906c25e50d7be1fd5656537c92670 /embassy-executor/src | |
| parent | 5e381d49da3d934defab072cecbac640b378138e (diff) | |
write to TaskStorage::future via inline(never) fn to encourage RVO
Diffstat (limited to 'embassy-executor/src')
| -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) { |
