Avoid creating &mut
s in Windows ReentrantMutex.
This commit is contained in:
parent
3fadc603ab
commit
0bb96e7490
@ -315,6 +315,7 @@
|
||||
#![feature(try_reserve)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(unsafe_block_in_unsafe_fn)]
|
||||
#![feature(unsafe_cell_raw_get)]
|
||||
#![feature(untagged_unions)]
|
||||
#![feature(unwind_attributes)]
|
||||
#![feature(vec_into_raw_parts)]
|
||||
|
@ -148,7 +148,7 @@ fn kind() -> Kind {
|
||||
}
|
||||
|
||||
pub struct ReentrantMutex {
|
||||
inner: UnsafeCell<MaybeUninit<c::CRITICAL_SECTION>>,
|
||||
inner: MaybeUninit<UnsafeCell<c::CRITICAL_SECTION>>,
|
||||
}
|
||||
|
||||
unsafe impl Send for ReentrantMutex {}
|
||||
@ -156,27 +156,27 @@ unsafe impl Sync for ReentrantMutex {}
|
||||
|
||||
impl ReentrantMutex {
|
||||
pub const fn uninitialized() -> ReentrantMutex {
|
||||
ReentrantMutex { inner: UnsafeCell::new(MaybeUninit::uninit()) }
|
||||
ReentrantMutex { inner: MaybeUninit::uninit() }
|
||||
}
|
||||
|
||||
pub unsafe fn init(&self) {
|
||||
c::InitializeCriticalSection((&mut *self.inner.get()).as_mut_ptr());
|
||||
c::InitializeCriticalSection(UnsafeCell::raw_get(self.inner.as_ptr()));
|
||||
}
|
||||
|
||||
pub unsafe fn lock(&self) {
|
||||
c::EnterCriticalSection((&mut *self.inner.get()).as_mut_ptr());
|
||||
c::EnterCriticalSection(UnsafeCell::raw_get(self.inner.as_ptr()));
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn try_lock(&self) -> bool {
|
||||
c::TryEnterCriticalSection((&mut *self.inner.get()).as_mut_ptr()) != 0
|
||||
c::TryEnterCriticalSection(UnsafeCell::raw_get(self.inner.as_ptr())) != 0
|
||||
}
|
||||
|
||||
pub unsafe fn unlock(&self) {
|
||||
c::LeaveCriticalSection((&mut *self.inner.get()).as_mut_ptr());
|
||||
c::LeaveCriticalSection(UnsafeCell::raw_get(self.inner.as_ptr()));
|
||||
}
|
||||
|
||||
pub unsafe fn destroy(&self) {
|
||||
c::DeleteCriticalSection((&mut *self.inner.get()).as_mut_ptr());
|
||||
c::DeleteCriticalSection(UnsafeCell::raw_get(self.inner.as_ptr()));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user