diff options
| author | Liam Murphy <[email protected]> | 2021-07-05 17:42:43 +1000 |
|---|---|---|
| committer | Liam Murphy <[email protected]> | 2021-07-05 17:42:43 +1000 |
| commit | 744e2cbb8a0b58eccf3a9708c8c28f1ef17e4771 (patch) | |
| tree | e288df991575c86e5079bdb33b7c1fd7888e96cb /examples | |
| parent | ed83b93b6dd34cf09d1f772ec32ebd036e8798a7 (diff) | |
extras: Fix UB in `Peripheral`
`Peripheral` assumed that interrupts can't be preempted,
when they can be preempted by higher priority interrupts.
So I put the interrupt handler inside a critical section,
and also added checks for whether the state had been dropped
before the critical section was entered.
I also added a `'static` bound to `PeripheralState`,
since `Pin` only guarantees that the memory it directly references
will not be invalidated.
It doesn't guarantee that memory its pointee references also won't be invalidated.
There were already some implementations of `PeripheralState`
that weren't `'static`, though,
so I added an unsafe `PeripheralStateUnchecked` trait
and forwarded the `unsafe` to the constructors of the implementors.
Diffstat (limited to 'examples')
0 files changed, 0 insertions, 0 deletions
