mirror of
https://github.com/rust-embedded/heapless.git
synced 2025-10-02 14:54:30 +00:00
Merge #132
132: PR #121 plus regression test r=japaric a=japaric Co-authored-by: konstantin <konstantin.kuznecov@gmx.de> Co-authored-by: Jorge Aparicio <jorge@japaric.io>
This commit is contained in:
commit
c4db58c8cb
17
src/mpmc.rs
17
src/mpmc.rs
@ -494,7 +494,11 @@ unsafe fn dequeue<T>(buffer: *mut Cell<T>, dequeue_pos: &AtomicU8, mask: u8) ->
|
|||||||
} else if dif < 0 {
|
} else if dif < 0 {
|
||||||
return None;
|
return None;
|
||||||
} else {
|
} else {
|
||||||
pos = dequeue_pos.load(Ordering::Relaxed);
|
if pos == 255 && dif == 255{
|
||||||
|
return None;
|
||||||
|
} else {
|
||||||
|
pos = dequeue_pos.load(Ordering::Relaxed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,4 +564,15 @@ mod tests {
|
|||||||
assert_eq!(q.dequeue(), Some(1));
|
assert_eq!(q.dequeue(), Some(1));
|
||||||
assert_eq!(q.dequeue(), None);
|
assert_eq!(q.dequeue(), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn blocking(){
|
||||||
|
let q = Q2::new();
|
||||||
|
for _ in 0..255 {
|
||||||
|
q.enqueue(0).unwrap();
|
||||||
|
q.dequeue();
|
||||||
|
}
|
||||||
|
// this should not block forever
|
||||||
|
q.dequeue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user