diff options
| author | bors <bors@rust-lang.org> | 2018-12-02 13:45:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-12-02 13:45:22 +0000 |
| commit | 8660eba2b9bec5b0fe971b7281f79e79c2df2fae (patch) | |
| tree | 86a0f14bde134d8357458c80472b51204d489b5d /src/libstd/sys | |
| parent | 9abc2312124de7c4275d76e9cbc81d50086c4768 (diff) | |
| parent | ebe69c06b38e0d1d20c79ee4342715514e917107 (diff) | |
| download | rust-8660eba2b9bec5b0fe971b7281f79e79c2df2fae.tar.gz rust-8660eba2b9bec5b0fe971b7281f79e79c2df2fae.zip | |
Auto merge of #56275 - RalfJung:win-mutex, r=SimonSapin
use MaybeUninit instead of mem::uninitialized for Windows Mutex I hope this builds, I do not have a Windows machine to test...
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/windows/mutex.rs | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/libstd/sys/windows/mutex.rs b/src/libstd/sys/windows/mutex.rs index b0e7331e2b6..2bd5dee63e8 100644 --- a/src/libstd/sys/windows/mutex.rs +++ b/src/libstd/sys/windows/mutex.rs @@ -30,7 +30,7 @@ //! detect recursive locks. use cell::UnsafeCell; -use mem; +use mem::{self, MaybeUninit}; use sync::atomic::{AtomicUsize, Ordering}; use sys::c; use sys::compat; @@ -157,34 +157,34 @@ fn kind() -> Kind { return ret; } -pub struct ReentrantMutex { inner: UnsafeCell<c::CRITICAL_SECTION> } +pub struct ReentrantMutex { inner: UnsafeCell<MaybeUninit<c::CRITICAL_SECTION>> } unsafe impl Send for ReentrantMutex {} unsafe impl Sync for ReentrantMutex {} impl ReentrantMutex { - pub unsafe fn uninitialized() -> ReentrantMutex { - mem::uninitialized() + pub fn uninitialized() -> ReentrantMutex { + ReentrantMutex { inner: UnsafeCell::new(MaybeUninit::uninitialized()) } } pub unsafe fn init(&mut self) { - c::InitializeCriticalSection(self.inner.get()); + c::InitializeCriticalSection((&mut *self.inner.get()).as_mut_ptr()); } pub unsafe fn lock(&self) { - c::EnterCriticalSection(self.inner.get()); + c::EnterCriticalSection((&mut *self.inner.get()).as_mut_ptr()); } #[inline] pub unsafe fn try_lock(&self) -> bool { - c::TryEnterCriticalSection(self.inner.get()) != 0 + c::TryEnterCriticalSection((&mut *self.inner.get()).as_mut_ptr()) != 0 } pub unsafe fn unlock(&self) { - c::LeaveCriticalSection(self.inner.get()); + c::LeaveCriticalSection((&mut *self.inner.get()).as_mut_ptr()); } pub unsafe fn destroy(&self) { - c::DeleteCriticalSection(self.inner.get()); + c::DeleteCriticalSection((&mut *self.inner.get()).as_mut_ptr()); } } |
