diff options
| author | Oleksandr Babak <alexanderbabak@proton.me> | 2025-04-02 17:57:48 +0200 |
|---|---|---|
| committer | datdenkikniet <38322042+datdenkikniet@users.noreply.github.com> | 2025-04-03 12:18:11 +0000 |
| commit | 08a0d7f53abe254b1fc9579de8e3a67d1c5f8a89 (patch) | |
| tree | eb2ba9236abed8e0729099e398d948471f183b49 | |
| parent | c3a5cf0a47166a1455bfa55194cb167bf863ce67 (diff) | |
feat: do not cause memory corruption if `remove_from_list` (safe function) is called multiple times
| -rw-r--r-- | rtic-common/src/wait_queue.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/rtic-common/src/wait_queue.rs b/rtic-common/src/wait_queue.rs index a3f5cab..4debcb9 100644 --- a/rtic-common/src/wait_queue.rs +++ b/rtic-common/src/wait_queue.rs @@ -140,6 +140,10 @@ impl<T: Clone> Link<T> { /// Remove this link from a linked list. pub fn remove_from_list(&self, list: &DoublyLinkedList<T>) { + if self.is_popped() { + return; + } + cs::with(|_| { // Make sure all previous writes are visible core::sync::atomic::fence(Ordering::SeqCst); |
