aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Babak <alexanderbabak@proton.me>2025-04-02 17:57:48 +0200
committerdatdenkikniet <38322042+datdenkikniet@users.noreply.github.com>2025-04-03 12:18:11 +0000
commit08a0d7f53abe254b1fc9579de8e3a67d1c5f8a89 (patch)
treeeb2ba9236abed8e0729099e398d948471f183b49
parentc3a5cf0a47166a1455bfa55194cb167bf863ce67 (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.rs4
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);