Use Drop instead of destroy() for locks.
This commit is contained in:
parent
fb1976011e
commit
ac5aa1ded5
@ -70,9 +70,13 @@ impl Condvar {
|
||||
mutex.lock();
|
||||
res == 0
|
||||
}
|
||||
}
|
||||
|
||||
pub unsafe fn destroy(&self) {
|
||||
let _ = abi::sem_destroy(self.sem1);
|
||||
let _ = abi::sem_destroy(self.sem2);
|
||||
impl Drop for Condvar {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
let _ = abi::sem_destroy(self.sem1);
|
||||
let _ = abi::sem_destroy(self.sem2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -215,7 +215,4 @@ impl Mutex {
|
||||
}
|
||||
guard.locked
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
@ -84,12 +84,6 @@ impl RwLock {
|
||||
// FIXME: should only wake up one of these some of the time
|
||||
self.cond.notify_all();
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {
|
||||
self.lock.destroy();
|
||||
self.cond.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
impl State {
|
||||
|
@ -117,8 +117,6 @@ impl Condvar {
|
||||
unsafe { mutex.lock() };
|
||||
success
|
||||
}
|
||||
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
||||
mod waiter_queue {
|
||||
|
@ -64,8 +64,10 @@ impl Mutex {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub unsafe fn destroy(&self) {
|
||||
impl Drop for Mutex {
|
||||
fn drop(&mut self) {
|
||||
if let Some(mtx) = self.mtx.get().map(|x| x.0) {
|
||||
expect_success_aborting(unsafe { abi::del_mtx(mtx) }, &"del_mtx");
|
||||
}
|
||||
|
@ -38,7 +38,4 @@ impl Condvar {
|
||||
unsafe { mutex.lock() };
|
||||
success
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
@ -52,7 +52,4 @@ impl Mutex {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
@ -168,9 +168,6 @@ impl RwLock {
|
||||
unsafe { self.__read_unlock(rguard, wguard) };
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
||||
// The following functions are needed by libunwind. These symbols are named
|
||||
|
@ -82,9 +82,11 @@ impl RwLock {
|
||||
let rwl = self.raw();
|
||||
expect_success_aborting(unsafe { abi::rwl_unl_rwl(rwl) }, &"rwl_unl_rwl");
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for RwLock {
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {
|
||||
fn drop(&mut self) {
|
||||
if let Some(rwl) = self.rwl.get().map(|x| x.0) {
|
||||
expect_success_aborting(unsafe { abi::rwl_del_rwl(rwl) }, &"rwl_del_rwl");
|
||||
}
|
||||
|
@ -24,9 +24,6 @@ impl Mutex {
|
||||
#[inline]
|
||||
pub unsafe fn init(&mut self) {}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn try_lock(&self) -> bool {
|
||||
self.futex.compare_exchange(0, 1, Acquire, Relaxed).is_ok()
|
||||
@ -121,9 +118,6 @@ impl Condvar {
|
||||
#[inline]
|
||||
pub unsafe fn init(&mut self) {}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
|
||||
// All the memory orderings here are `Relaxed`,
|
||||
// because synchronization is done by unlocking and locking the mutex.
|
||||
|
||||
|
@ -63,9 +63,6 @@ impl RwLock {
|
||||
Self { state: AtomicU32::new(0), writer_notify: AtomicU32::new(0) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn try_read(&self) -> bool {
|
||||
self.state
|
||||
|
@ -179,14 +179,14 @@ impl Condvar {
|
||||
|
||||
#[inline]
|
||||
#[cfg(not(target_os = "dragonfly"))]
|
||||
pub unsafe fn destroy(&self) {
|
||||
unsafe fn destroy(&mut self) {
|
||||
let r = libc::pthread_cond_destroy(self.inner.get());
|
||||
debug_assert_eq!(r, 0);
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[cfg(target_os = "dragonfly")]
|
||||
pub unsafe fn destroy(&self) {
|
||||
unsafe fn destroy(&mut self) {
|
||||
let r = libc::pthread_cond_destroy(self.inner.get());
|
||||
// On DragonFly pthread_cond_destroy() returns EINVAL if called on
|
||||
// a condvar that was just initialized with
|
||||
@ -195,3 +195,10 @@ impl Condvar {
|
||||
debug_assert!(r == 0 || r == libc::EINVAL);
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Condvar {
|
||||
#[inline]
|
||||
fn drop(&mut self) {
|
||||
unsafe { self.destroy() };
|
||||
}
|
||||
}
|
||||
|
@ -73,13 +73,13 @@ impl Mutex {
|
||||
}
|
||||
#[inline]
|
||||
#[cfg(not(target_os = "dragonfly"))]
|
||||
pub unsafe fn destroy(&self) {
|
||||
unsafe fn destroy(&mut self) {
|
||||
let r = libc::pthread_mutex_destroy(self.inner.get());
|
||||
debug_assert_eq!(r, 0);
|
||||
}
|
||||
#[inline]
|
||||
#[cfg(target_os = "dragonfly")]
|
||||
pub unsafe fn destroy(&self) {
|
||||
unsafe fn destroy(&mut self) {
|
||||
let r = libc::pthread_mutex_destroy(self.inner.get());
|
||||
// On DragonFly pthread_mutex_destroy() returns EINVAL if called on a
|
||||
// mutex that was just initialized with libc::PTHREAD_MUTEX_INITIALIZER.
|
||||
@ -89,6 +89,13 @@ impl Mutex {
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Mutex {
|
||||
#[inline]
|
||||
fn drop(&mut self) {
|
||||
unsafe { self.destroy() };
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) struct PthreadMutexAttr<'a>(pub &'a mut MaybeUninit<libc::pthread_mutexattr_t>);
|
||||
|
||||
impl Drop for PthreadMutexAttr<'_> {
|
||||
|
@ -128,7 +128,7 @@ impl RwLock {
|
||||
self.raw_unlock();
|
||||
}
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {
|
||||
unsafe fn destroy(&mut self) {
|
||||
let r = libc::pthread_rwlock_destroy(self.inner.get());
|
||||
// On DragonFly pthread_rwlock_destroy() returns EINVAL if called on a
|
||||
// rwlock that was just initialized with
|
||||
@ -141,3 +141,10 @@ impl RwLock {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for RwLock {
|
||||
#[inline]
|
||||
fn drop(&mut self) {
|
||||
unsafe { self.destroy() };
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,4 @@ impl Condvar {
|
||||
pub unsafe fn wait_timeout(&self, _mutex: &Mutex, _dur: Duration) -> bool {
|
||||
panic!("condvar wait not supported");
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
@ -32,7 +32,4 @@ impl Mutex {
|
||||
pub unsafe fn try_lock(&self) -> bool {
|
||||
self.locked.replace(true) == false
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
@ -62,7 +62,4 @@ impl RwLock {
|
||||
pub unsafe fn write_unlock(&self) {
|
||||
assert_eq!(self.mode.replace(0), -1);
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {}
|
||||
}
|
||||
|
@ -51,8 +51,4 @@ impl Condvar {
|
||||
pub unsafe fn notify_all(&self) {
|
||||
c::WakeAllConditionVariable(self.inner.get())
|
||||
}
|
||||
|
||||
pub unsafe fn destroy(&self) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
@ -53,9 +53,4 @@ impl Mutex {
|
||||
pub unsafe fn unlock(&self) {
|
||||
c::ReleaseSRWLockExclusive(raw(self));
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {
|
||||
// SRWLock does not need to be destroyed.
|
||||
}
|
||||
}
|
||||
|
@ -38,9 +38,4 @@ impl RwLock {
|
||||
pub unsafe fn write_unlock(&self) {
|
||||
c::ReleaseSRWLockExclusive(self.inner.get())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn destroy(&self) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
@ -55,9 +55,3 @@ impl Condvar {
|
||||
self.inner.wait_timeout(mutex.raw(), dur)
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Condvar {
|
||||
fn drop(&mut self) {
|
||||
unsafe { self.inner.destroy() };
|
||||
}
|
||||
}
|
||||
|
@ -92,9 +92,3 @@ impl MovableMutex {
|
||||
self.0.unlock()
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for MovableMutex {
|
||||
fn drop(&mut self) {
|
||||
unsafe { self.0.destroy() };
|
||||
}
|
||||
}
|
||||
|
@ -168,13 +168,6 @@ impl<T> ReentrantMutex<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Drop for ReentrantMutex<T> {
|
||||
fn drop(&mut self) {
|
||||
// Safety: We're the unique owner of this mutex and not going to use it afterwards.
|
||||
unsafe { self.mutex.destroy() }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Deref for ReentrantMutexGuard<'_, T> {
|
||||
type Target = T;
|
||||
|
||||
|
@ -126,9 +126,3 @@ impl MovableRwLock {
|
||||
self.0.write_unlock()
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for MovableRwLock {
|
||||
fn drop(&mut self) {
|
||||
unsafe { self.0.destroy() };
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user