about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcore/rt/message_queue.rs11
-rw-r--r--src/libcore/rt/work_queue.rs9
2 files changed, 19 insertions, 1 deletions
diff --git a/src/libcore/rt/message_queue.rs b/src/libcore/rt/message_queue.rs
index 014e71d3de6..eaab9288ac8 100644
--- a/src/libcore/rt/message_queue.rs
+++ b/src/libcore/rt/message_queue.rs
@@ -14,6 +14,7 @@ use vec::OwnedVector;
 use cell::Cell;
 use option::*;
 use unstable::sync::{Exclusive, exclusive};
+use clone::Clone;
 
 pub struct MessageQueue<T> {
     // XXX: Another mystery bug fixed by boxing this lock
@@ -41,4 +42,12 @@ impl<T: Owned> MessageQueue<T> {
             }
         }
     }
-}
\ No newline at end of file
+}
+
+impl<T> Clone for MessageQueue<T> {
+    fn clone(&self) -> MessageQueue<T> {
+        MessageQueue {
+            queue: self.queue.clone()
+        }
+    }
+}
diff --git a/src/libcore/rt/work_queue.rs b/src/libcore/rt/work_queue.rs
index 31f73cd09b5..e9eb663392b 100644
--- a/src/libcore/rt/work_queue.rs
+++ b/src/libcore/rt/work_queue.rs
@@ -14,6 +14,7 @@ use vec::OwnedVector;
 use unstable::sync::{Exclusive, exclusive};
 use cell::Cell;
 use kinds::Owned;
+use clone::Clone;
 
 pub struct WorkQueue<T> {
     // XXX: Another mystery bug fixed by boxing this lock
@@ -56,3 +57,11 @@ pub impl<T: Owned> WorkQueue<T> {
         self.queue.with_imm(|q| q.is_empty() )
     }
 }
+
+impl<T> Clone for WorkQueue<T> {
+    fn clone(&self) -> WorkQueue<T> {
+        WorkQueue {
+            queue: self.queue.clone()
+        }
+    }
+}