about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEric Holk <eric.holk@gmail.com>2012-06-27 10:24:51 -0700
committerEric Holk <eric.holk@gmail.com>2012-06-27 10:24:51 -0700
commit404afcbb41898cf7f516f07cae3dc42e47bda46d (patch)
tree16b72317bd5a99e0ba684f66a2ef69e46ec1ee63 /src
parent697f1e38d646bb6c7bab054c8c8c5b469c566ef6 (diff)
downloadrust-404afcbb41898cf7f516f07cae3dc42e47bda46d.tar.gz
rust-404afcbb41898cf7f516f07cae3dc42e47bda46d.zip
Mark exclusive arc-related functions as unsafe. Fixes #2727.
Diffstat (limited to 'src')
-rw-r--r--src/libcore/arc.rs24
-rw-r--r--src/libcore/sys.rs4
2 files changed, 13 insertions, 15 deletions
diff --git a/src/libcore/arc.rs b/src/libcore/arc.rs
index f13a34d260e..12ada1b9b18 100644
--- a/src/libcore/arc.rs
+++ b/src/libcore/arc.rs
@@ -104,19 +104,17 @@ impl methods<T: send> for exclusive<T> {
         arc_destruct(self.data)
     }
 
-    fn with<U>(f: fn(sys::condition, x: &T) -> U) -> U {
-        unsafe {
-            let ptr: ~arc_data<ex_data<T>> =
-                  unsafe::reinterpret_cast(self.data);
-            let r = {
-                let rec: &ex_data<T> = &(*ptr).data;
-                rec.lock.lock_cond() {|c|
-                    f(c, &rec.data)
-                }
-            };
-            unsafe::forget(ptr);
-            r
-        }
+    unsafe fn with<U>(f: fn(sys::condition, x: &T) -> U) -> U {
+        let ptr: ~arc_data<ex_data<T>> =
+            unsafe::reinterpret_cast(self.data);
+        let r = {
+            let rec: &ex_data<T> = &(*ptr).data;
+            rec.lock.lock_cond() {|c|
+                f(c, &rec.data)
+            }
+        };
+        unsafe::forget(ptr);
+        r
     }
 }
 
diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs
index 771107cd1a7..05616b0dcf3 100644
--- a/src/libcore/sys.rs
+++ b/src/libcore/sys.rs
@@ -106,13 +106,13 @@ fn create_lock() -> lock_and_signal {
 }
 
 impl methods for lock_and_signal {
-    fn lock<T>(f: fn() -> T) -> T {
+    unsafe fn lock<T>(f: fn() -> T) -> T {
         rustrt::rust_lock_cond_lock(self.lock);
         let _r = unlock(self.lock);
         f()
     }
 
-    fn lock_cond<T>(f: fn(condition) -> T) -> T {
+    unsafe fn lock_cond<T>(f: fn(condition) -> T) -> T {
         rustrt::rust_lock_cond_lock(self.lock);
         let _r = unlock(self.lock);
         f(condition_(self.lock))