about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
authorFlavio Percoco <flaper87@gmail.com>2014-12-24 17:40:40 +0100
committerFlavio Percoco <flaper87@gmail.com>2014-12-26 17:26:33 +0100
commitbb315f25f84c93b69d99d41b2c68185639c30e83 (patch)
tree7d5ad491eeadcbb8a707126cebdd285a57ec7dc9 /src/libstd/sys
parent52072dec0f6838ae251259a8f0574776c2028a1b (diff)
downloadrust-bb315f25f84c93b69d99d41b2c68185639c30e83.tar.gz
rust-bb315f25f84c93b69d99d41b2c68185639c30e83.zip
Implement RaceBox for StdinReader
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/common/helper_thread.rs9
-rw-r--r--src/libstd/sys/windows/timer.rs3
2 files changed, 11 insertions, 1 deletions
diff --git a/src/libstd/sys/common/helper_thread.rs b/src/libstd/sys/common/helper_thread.rs
index b0137bdad06..a629f035b07 100644
--- a/src/libstd/sys/common/helper_thread.rs
+++ b/src/libstd/sys/common/helper_thread.rs
@@ -63,6 +63,11 @@ unsafe impl<M:Send> Send for Helper<M> { }
 
 unsafe impl<M:Send> Sync for Helper<M> { }
 
+struct RaceBox(helper_signal::signal);
+
+unsafe impl Send for RaceBox {}
+unsafe impl Sync for RaceBox {}
+
 impl<M: Send> Helper<M> {
     /// Lazily boots a helper thread, becoming a no-op if the helper has already
     /// been spawned.
@@ -85,9 +90,11 @@ impl<M: Send> Helper<M> {
                 let (receive, send) = helper_signal::new();
                 *self.signal.get() = send as uint;
 
+                let receive = RaceBox(receive);
+
                 let t = f();
                 Thread::spawn(move |:| {
-                    helper(receive, rx, t);
+                    helper(receive.0, rx, t);
                     let _g = self.lock.lock();
                     *self.shutdown.get() = true;
                     self.cond.notify_one()
diff --git a/src/libstd/sys/windows/timer.rs b/src/libstd/sys/windows/timer.rs
index 7e4dd768aa9..874838950cd 100644
--- a/src/libstd/sys/windows/timer.rs
+++ b/src/libstd/sys/windows/timer.rs
@@ -48,6 +48,9 @@ pub enum Req {
     RemoveTimer(libc::HANDLE, Sender<()>),
 }
 
+unsafe impl Send for Req {}
+
+
 fn helper(input: libc::HANDLE, messages: Receiver<Req>, _: ()) {
     let mut objs = vec![input];
     let mut chans = vec![];