Skip to content

Commit 9645a1b

Browse files
debug-itoToshio Ito
authored andcommitted
mpmc: use i8 to calculate dif
Remove the boundary check introduced by #132 Now it passes full_at_wrapped_pos0.
1 parent 98f9636 commit 9645a1b

File tree

1 file changed

+3
-7
lines changed

1 file changed

+3
-7
lines changed

src/mpmc.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ unsafe fn dequeue<T>(buffer: *mut Cell<T>, dequeue_pos: &AtomicU8, mask: u8) ->
479479
loop {
480480
cell = buffer.add(usize::from(pos & mask));
481481
let seq = (*cell).sequence.load(Ordering::Acquire);
482-
let dif = i16::from(seq) - i16::from(pos.wrapping_add(1));
482+
let dif = (seq as i8) - ((pos.wrapping_add(1)) as i8);
483483

484484
if dif == 0 {
485485
if dequeue_pos
@@ -496,11 +496,7 @@ unsafe fn dequeue<T>(buffer: *mut Cell<T>, dequeue_pos: &AtomicU8, mask: u8) ->
496496
} else if dif < 0 {
497497
return None;
498498
} else {
499-
if pos == 255 && dif == 255 {
500-
return None;
501-
} else {
502-
pos = dequeue_pos.load(Ordering::Relaxed);
503-
}
499+
pos = dequeue_pos.load(Ordering::Relaxed);
504500
}
505501
}
506502

@@ -523,7 +519,7 @@ unsafe fn enqueue<T>(
523519
loop {
524520
cell = buffer.add(usize::from(pos & mask));
525521
let seq = (*cell).sequence.load(Ordering::Acquire);
526-
let dif = i16::from(seq) - i16::from(pos);
522+
let dif = (seq as i8) - (pos as i8);
527523

528524
if dif == 0 {
529525
if enqueue_pos

0 commit comments

Comments
 (0)