From f436f9ca2963e33cc41802370bb9c551c833970e Mon Sep 17 00:00:00 2001 From: Flavio Percoco Date: Mon, 22 Dec 2014 00:49:42 +0100 Subject: Make Send and Sync traits unsafe --- src/libstd/sync/mutex.rs | 9 +++++---- src/libstd/sync/once.rs | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'src/libstd/sync') diff --git a/src/libstd/sync/mutex.rs b/src/libstd/sync/mutex.rs index 2849813c510..d2dafac281a 100644 --- a/src/libstd/sync/mutex.rs +++ b/src/libstd/sync/mutex.rs @@ -11,7 +11,7 @@ use prelude::*; use cell::{UnsafeCell, RacyCell}; -use kinds::marker; +use kinds::{marker, Sync}; use sync::{poison, AsMutexGuard}; use sys_common::mutex as sys; @@ -73,9 +73,9 @@ pub struct Mutex { data: RacyCell, } -impl Send for Mutex { } +unsafe impl Send for Mutex { } -impl Sync for Mutex { } +unsafe impl Sync for Mutex { } /// The static mutex type is provided to allow for static allocation of mutexes. /// @@ -98,12 +98,13 @@ impl Sync for Mutex { } /// } /// // lock is unlocked here. /// ``` -#[deriving(Sync)] pub struct StaticMutex { lock: sys::Mutex, poison: RacyCell, } +unsafe impl Sync for StaticMutex {} + /// An RAII implementation of a "scoped lock" of a mutex. When this structure is /// dropped (falls out of scope), the lock will be unlocked. /// diff --git a/src/libstd/sync/once.rs b/src/libstd/sync/once.rs index 4b940b0420a..4d9fbb59908 100644 --- a/src/libstd/sync/once.rs +++ b/src/libstd/sync/once.rs @@ -14,6 +14,7 @@ //! example use case would be for initializing an FFI library. use int; +use kinds::Sync; use mem::drop; use ops::FnOnce; use sync::atomic; @@ -35,13 +36,14 @@ use sync::{StaticMutex, MUTEX_INIT}; /// // run initialization here /// }); /// ``` -#[deriving(Sync)] pub struct Once { mutex: StaticMutex, cnt: atomic::AtomicInt, lock_cnt: atomic::AtomicInt, } +unsafe impl Sync for Once {} + /// Initialization value for static `Once` values. pub const ONCE_INIT: Once = Once { mutex: MUTEX_INIT, -- cgit 1.4.1-3-g733a5