diff options
| author | kbleeke <[email protected]> | 2023-03-27 12:40:27 +0200 |
|---|---|---|
| committer | kbleeke <[email protected]> | 2023-03-27 12:40:27 +0200 |
| commit | 4c521044131279aa36f7e21dbc6ec566703a57c6 (patch) | |
| tree | e06ecceda13cdd9ad73a455cbf2a5abf819888a0 /src | |
| parent | 6f547cf05ddd1a27c8ec4e107ac227f7f9520ba6 (diff) | |
simplify ioctl waker code
Diffstat (limited to 'src')
| -rw-r--r-- | src/ioctl.rs | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/ioctl.rs b/src/ioctl.rs index 2d4cdb871..6a7465593 100644 --- a/src/ioctl.rs +++ b/src/ioctl.rs | |||
| @@ -2,8 +2,6 @@ use core::cell::{Cell, RefCell}; | |||
| 2 | use core::future::poll_fn; | 2 | use core::future::poll_fn; |
| 3 | use core::task::{Poll, Waker}; | 3 | use core::task::{Poll, Waker}; |
| 4 | 4 | ||
| 5 | use embassy_sync::blocking_mutex::raw::NoopRawMutex; | ||
| 6 | use embassy_sync::blocking_mutex::Mutex; | ||
| 7 | use embassy_sync::waitqueue::WakerRegistration; | 5 | use embassy_sync::waitqueue::WakerRegistration; |
| 8 | 6 | ||
| 9 | #[derive(Clone, Copy)] | 7 | #[derive(Clone, Copy)] |
| @@ -27,37 +25,39 @@ enum IoctlStateInner { | |||
| 27 | Done { resp_len: usize }, | 25 | Done { resp_len: usize }, |
| 28 | } | 26 | } |
| 29 | 27 | ||
| 28 | #[derive(Default)] | ||
| 29 | struct Wakers { | ||
| 30 | control: WakerRegistration, | ||
| 31 | runner: WakerRegistration, | ||
| 32 | } | ||
| 33 | |||
| 30 | pub struct IoctlState { | 34 | pub struct IoctlState { |
| 31 | state: Cell<IoctlStateInner>, | 35 | state: Cell<IoctlStateInner>, |
| 32 | wakers: Mutex<NoopRawMutex, RefCell<(WakerRegistration, WakerRegistration)>>, | 36 | wakers: RefCell<Wakers>, |
| 33 | } | 37 | } |
| 34 | 38 | ||
| 35 | impl IoctlState { | 39 | impl IoctlState { |
| 36 | pub fn new() -> Self { | 40 | pub fn new() -> Self { |
| 37 | Self { | 41 | Self { |
| 38 | state: Cell::new(IoctlStateInner::Done { resp_len: 0 }), | 42 | state: Cell::new(IoctlStateInner::Done { resp_len: 0 }), |
| 39 | wakers: Mutex::new(RefCell::default()), | 43 | wakers: Default::default(), |
| 40 | } | 44 | } |
| 41 | } | 45 | } |
| 42 | 46 | ||
| 43 | fn wake_control(&self) { | 47 | fn wake_control(&self) { |
| 44 | self.wakers.lock(|f| { | 48 | self.wakers.borrow_mut().control.wake(); |
| 45 | f.borrow_mut().0.wake(); | ||
| 46 | }) | ||
| 47 | } | 49 | } |
| 48 | 50 | ||
| 49 | fn register_control(&self, waker: &Waker) { | 51 | fn register_control(&self, waker: &Waker) { |
| 50 | self.wakers.lock(|f| f.borrow_mut().0.register(waker)); | 52 | self.wakers.borrow_mut().control.register(waker); |
| 51 | } | 53 | } |
| 52 | 54 | ||
| 53 | fn wake_runner(&self) { | 55 | fn wake_runner(&self) { |
| 54 | self.wakers.lock(|f| { | 56 | self.wakers.borrow_mut().runner.wake(); |
| 55 | f.borrow_mut().1.wake(); | ||
| 56 | }) | ||
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | fn register_runner(&self, waker: &Waker) { | 59 | fn register_runner(&self, waker: &Waker) { |
| 60 | self.wakers.lock(|f| f.borrow_mut().1.register(waker)); | 60 | self.wakers.borrow_mut().runner.register(waker); |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | pub async fn wait_complete(&self) -> usize { | 63 | pub async fn wait_complete(&self) -> usize { |
