diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2015-05-27 11:18:36 +0300 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2015-05-27 11:19:03 +0300 |
| commit | 377b0900aede976b2d37a499bbd7b62c2e39b358 (patch) | |
| tree | b4a5a4431d36ed1a4e0a39c7d2ef2563ecac9bf4 /src/libstd/sync/rwlock.rs | |
| parent | 6e8e4f847c2ea02fec021ea15dfb2de6beac797a (diff) | |
| download | rust-377b0900aede976b2d37a499bbd7b62c2e39b358.tar.gz rust-377b0900aede976b2d37a499bbd7b62c2e39b358.zip | |
Use `const fn` to abstract away the contents of UnsafeCell & friends.
Diffstat (limited to 'src/libstd/sync/rwlock.rs')
| -rw-r--r-- | src/libstd/sync/rwlock.rs | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/libstd/sync/rwlock.rs b/src/libstd/sync/rwlock.rs index 36f6fbf3b72..e7c3d744c17 100644 --- a/src/libstd/sync/rwlock.rs +++ b/src/libstd/sync/rwlock.rs @@ -102,10 +102,7 @@ pub struct StaticRwLock { /// Constant initialization for a statically-initialized rwlock. #[unstable(feature = "std_misc", reason = "may be merged with RwLock in the future")] -pub const RW_LOCK_INIT: StaticRwLock = StaticRwLock { - lock: sys::RWLOCK_INIT, - poison: poison::FLAG_INIT, -}; +pub const RW_LOCK_INIT: StaticRwLock = StaticRwLock::new(); /// RAII structure used to release the shared read access of a lock when /// dropped. @@ -142,7 +139,7 @@ impl<T> RwLock<T> { /// ``` #[stable(feature = "rust1", since = "1.0.0")] pub fn new(t: T) -> RwLock<T> { - RwLock { inner: box RW_LOCK_INIT, data: UnsafeCell::new(t) } + RwLock { inner: box StaticRwLock::new(), data: UnsafeCell::new(t) } } } @@ -280,9 +277,19 @@ impl<T: ?Sized + fmt::Debug> fmt::Debug for RwLock<T> { struct Dummy(UnsafeCell<()>); unsafe impl Sync for Dummy {} -static DUMMY: Dummy = Dummy(UnsafeCell { value: () }); +static DUMMY: Dummy = Dummy(UnsafeCell::new(())); impl StaticRwLock { + /// Creates a new rwlock. + #[unstable(feature = "std_misc", + reason = "may be merged with RwLock in the future")] + pub const fn new() -> StaticRwLock { + StaticRwLock { + lock: sys::RWLock::new(), + poison: poison::Flag::new(), + } + } + /// Locks this rwlock with shared read access, blocking the current thread /// until it can be acquired. /// @@ -420,7 +427,7 @@ mod tests { use rand::{self, Rng}; use sync::mpsc::channel; use thread; - use sync::{Arc, RwLock, StaticRwLock, TryLockError, RW_LOCK_INIT}; + use sync::{Arc, RwLock, StaticRwLock, TryLockError}; #[test] fn smoke() { @@ -433,7 +440,7 @@ mod tests { #[test] fn static_smoke() { - static R: StaticRwLock = RW_LOCK_INIT; + static R: StaticRwLock = StaticRwLock::new(); drop(R.read().unwrap()); drop(R.write().unwrap()); drop((R.read().unwrap(), R.read().unwrap())); @@ -443,7 +450,7 @@ mod tests { #[test] fn frob() { - static R: StaticRwLock = RW_LOCK_INIT; + static R: StaticRwLock = StaticRwLock::new(); const N: usize = 10; const M: usize = 1000; |
