From 731e8ae150cb0de62e536a3fd71e8d53e28018ef Mon Sep 17 00:00:00 2001
From: Jorge Aparicio <jorge@japaric.io>
Date: Thu, 9 Nov 2017 02:09:38 +0100
Subject: [PATCH] rewrite the test for less unsafety

---
 tests/tsan.rs | 38 +++++++++++++++++++++++++-------------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git a/tests/tsan.rs b/tests/tsan.rs
index 6685bd2..dcef81c 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();
     });
 }
-- 
GitLab