diff --git a/tests/tsan.rs b/tests/tsan.rs index 6685bd234c82a2b6da1c7e3927968ddade3d2ebb..dcef81cf40f75e56866d93c1de9decd4abd2356d 100644 --- a/tests/tsan.rs +++ b/tests/tsan.rs @@ -1,3 +1,5 @@ +#![deny(warnings)] + extern crate heapless; use std::thread; @@ -8,14 +10,20 @@ use heapless::RingBuffer; fn once() { static mut RB: RingBuffer<i32, [i32; 4]> = RingBuffer::new(); - unsafe { RB.split() }.0.enqueue(0).unwrap(); + let rb = unsafe { &mut RB }; + + rb.enqueue(0).unwrap(); + + let (mut p, mut c) = rb.split(); - thread::spawn(|| { - unsafe { RB.split() }.0.enqueue(1).unwrap(); + p.enqueue(1).unwrap(); + + thread::spawn(move || { + p.enqueue(1).unwrap(); }); - thread::spawn(|| { - unsafe { RB.split() }.1.dequeue().unwrap(); + thread::spawn(move || { + c.dequeue().unwrap(); }); } @@ -23,16 +31,20 @@ fn once() { fn twice() { static mut RB: RingBuffer<i32, [i32; 8]> = RingBuffer::new(); - unsafe { RB.split() }.0.enqueue(0).unwrap(); - unsafe { RB.split() }.0.enqueue(1).unwrap(); + let rb = unsafe { &mut RB }; + + rb.enqueue(0).unwrap(); + rb.enqueue(1).unwrap(); + + let (mut p, mut c) = rb.split(); - thread::spawn(|| { - unsafe { RB.split() }.0.enqueue(2).unwrap(); - unsafe { RB.split() }.0.enqueue(3).unwrap(); + thread::spawn(move || { + p.enqueue(2).unwrap(); + p.enqueue(3).unwrap(); }); - thread::spawn(|| { - unsafe { RB.split() }.1.dequeue().unwrap(); - unsafe { RB.split() }.1.dequeue().unwrap(); + thread::spawn(move || { + c.dequeue().unwrap(); + c.dequeue().unwrap(); }); }