diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-05-05 16:44:28 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-05-07 09:30:00 -0700 |
| commit | 7529bd60c3cbc4c7b635ee43a89d5b14f6fb8bf7 (patch) | |
| tree | 3497eae8c3d88f0f1b5c1e9fb3cf289b751c414e /src/libstd/sys/windows/mutex.rs | |
| parent | a031325e83b8f050f840395239197ea87361ada5 (diff) | |
| download | rust-7529bd60c3cbc4c7b635ee43a89d5b14f6fb8bf7.tar.gz rust-7529bd60c3cbc4c7b635ee43a89d5b14f6fb8bf7.zip | |
std: Remove a double-box in ReentrantMutex
Perform unsafe initialization up front and then only afterward the mutex is in place do we initialize it.
Diffstat (limited to 'src/libstd/sys/windows/mutex.rs')
| -rw-r--r-- | src/libstd/sys/windows/mutex.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/libstd/sys/windows/mutex.rs b/src/libstd/sys/windows/mutex.rs index ca20858bb5b..9d2624f9418 100644 --- a/src/libstd/sys/windows/mutex.rs +++ b/src/libstd/sys/windows/mutex.rs @@ -59,16 +59,18 @@ impl Mutex { } } -pub struct ReentrantMutex { inner: Box<UnsafeCell<ffi::CRITICAL_SECTION>> } +pub struct ReentrantMutex { inner: UnsafeCell<ffi::CRITICAL_SECTION> } unsafe impl Send for ReentrantMutex {} unsafe impl Sync for ReentrantMutex {} impl ReentrantMutex { - pub unsafe fn new() -> ReentrantMutex { - let mutex = ReentrantMutex { inner: box mem::uninitialized() }; - ffi::InitializeCriticalSection(mutex.inner.get()); - mutex + pub unsafe fn uninitialized() -> ReentrantMutex { + mem::uninitialized() + } + + pub unsafe fn init(&mut self) { + ffi::InitializeCriticalSection(self.inner.get()); } pub unsafe fn lock(&self) { |
