mirror of
https://github.com/rust-embedded/heapless.git
synced 2025-09-27 04:20:24 +00:00
Fixed MPMC panic on wrapping sub
This commit is contained in:
parent
bd32ab8383
commit
241085e970
@ -481,7 +481,7 @@ unsafe fn dequeue<T>(buffer: *mut Cell<T>, dequeue_pos: &AtomicU8, mask: u8) ->
|
||||
loop {
|
||||
cell = buffer.add(usize::from(pos & mask));
|
||||
let seq = (*cell).sequence.load(Ordering::Acquire);
|
||||
let dif = (seq as i8) - ((pos.wrapping_add(1)) as i8);
|
||||
let dif = (seq as i8).wrapping_sub((pos.wrapping_add(1)) as i8);
|
||||
|
||||
if dif == 0 {
|
||||
if dequeue_pos
|
||||
@ -521,7 +521,7 @@ unsafe fn enqueue<T>(
|
||||
loop {
|
||||
cell = buffer.add(usize::from(pos & mask));
|
||||
let seq = (*cell).sequence.load(Ordering::Acquire);
|
||||
let dif = (seq as i8) - (pos as i8);
|
||||
let dif = (seq as i8).wrapping_sub(pos as i8);
|
||||
|
||||
if dif == 0 {
|
||||
if enqueue_pos
|
||||
|
@ -131,6 +131,7 @@ fn mpmc_contention() {
|
||||
|
||||
for i in 0..(16 * N) {
|
||||
sum = sum.wrapping_add(i);
|
||||
println!("enqueue {}", i);
|
||||
while let Err(_) = Q.enqueue(i) {}
|
||||
}
|
||||
|
||||
@ -146,6 +147,7 @@ fn mpmc_contention() {
|
||||
match Q.dequeue() {
|
||||
Some(v) => {
|
||||
sum = sum.wrapping_add(v);
|
||||
println!("dequeue {}", v);
|
||||
break;
|
||||
}
|
||||
_ => {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user