mirror of
https://github.com/rust-embedded/heapless.git
synced 2025-10-02 06:50:32 +00:00
mpmc: use i8 to calculate dif
Remove the boundary check introduced by #132 Now it passes full_at_wrapped_pos0.
This commit is contained in:
parent
98f9636d88
commit
9645a1bd64
@ -479,7 +479,7 @@ unsafe fn dequeue<T>(buffer: *mut Cell<T>, dequeue_pos: &AtomicU8, mask: u8) ->
|
|||||||
loop {
|
loop {
|
||||||
cell = buffer.add(usize::from(pos & mask));
|
cell = buffer.add(usize::from(pos & mask));
|
||||||
let seq = (*cell).sequence.load(Ordering::Acquire);
|
let seq = (*cell).sequence.load(Ordering::Acquire);
|
||||||
let dif = i16::from(seq) - i16::from(pos.wrapping_add(1));
|
let dif = (seq as i8) - ((pos.wrapping_add(1)) as i8);
|
||||||
|
|
||||||
if dif == 0 {
|
if dif == 0 {
|
||||||
if dequeue_pos
|
if dequeue_pos
|
||||||
@ -495,14 +495,10 @@ 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 {
|
|
||||||
if pos == 255 && dif == 255 {
|
|
||||||
return None;
|
|
||||||
} else {
|
} else {
|
||||||
pos = dequeue_pos.load(Ordering::Relaxed);
|
pos = dequeue_pos.load(Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let data = (*cell).data.as_ptr().read();
|
let data = (*cell).data.as_ptr().read();
|
||||||
(*cell)
|
(*cell)
|
||||||
@ -523,7 +519,7 @@ unsafe fn enqueue<T>(
|
|||||||
loop {
|
loop {
|
||||||
cell = buffer.add(usize::from(pos & mask));
|
cell = buffer.add(usize::from(pos & mask));
|
||||||
let seq = (*cell).sequence.load(Ordering::Acquire);
|
let seq = (*cell).sequence.load(Ordering::Acquire);
|
||||||
let dif = i16::from(seq) - i16::from(pos);
|
let dif = (seq as i8) - (pos as i8);
|
||||||
|
|
||||||
if dif == 0 {
|
if dif == 0 {
|
||||||
if enqueue_pos
|
if enqueue_pos
|
||||||
|
Loading…
x
Reference in New Issue
Block a user