-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #95173 - m-ou-se:sys-locks-module, r=dtolnay
Move std::sys::{mutex, condvar, rwlock} to std::sys::locks. This cleans up the the std::sys modules a bit by putting the locks in a single module called `locks` rather than spread over the three modules `mutex`, `condvar`, and `rwlock`. This makes it easier to organise lock implementations, which helps with #93740.
- Loading branch information
Showing
32 changed files
with
133 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
mod pthread_condvar; | ||
mod pthread_mutex; | ||
mod pthread_remutex; | ||
mod pthread_rwlock; | ||
pub use pthread_condvar::{Condvar, MovableCondvar}; | ||
pub use pthread_mutex::{MovableMutex, Mutex}; | ||
pub use pthread_remutex::ReentrantMutex; | ||
pub use pthread_rwlock::{MovableRWLock, RWLock}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
use super::pthread_mutex::PthreadMutexAttr; | ||
use crate::cell::UnsafeCell; | ||
use crate::mem::MaybeUninit; | ||
use crate::sys::cvt_nz; | ||
|
||
pub struct ReentrantMutex { | ||
inner: UnsafeCell<libc::pthread_mutex_t>, | ||
} | ||
|
||
unsafe impl Send for ReentrantMutex {} | ||
unsafe impl Sync for ReentrantMutex {} | ||
|
||
impl ReentrantMutex { | ||
pub const unsafe fn uninitialized() -> ReentrantMutex { | ||
ReentrantMutex { inner: UnsafeCell::new(libc::PTHREAD_MUTEX_INITIALIZER) } | ||
} | ||
|
||
pub unsafe fn init(&self) { | ||
let mut attr = MaybeUninit::<libc::pthread_mutexattr_t>::uninit(); | ||
cvt_nz(libc::pthread_mutexattr_init(attr.as_mut_ptr())).unwrap(); | ||
let attr = PthreadMutexAttr(&mut attr); | ||
cvt_nz(libc::pthread_mutexattr_settype(attr.0.as_mut_ptr(), libc::PTHREAD_MUTEX_RECURSIVE)) | ||
.unwrap(); | ||
cvt_nz(libc::pthread_mutex_init(self.inner.get(), attr.0.as_ptr())).unwrap(); | ||
} | ||
|
||
pub unsafe fn lock(&self) { | ||
let result = libc::pthread_mutex_lock(self.inner.get()); | ||
debug_assert_eq!(result, 0); | ||
} | ||
|
||
#[inline] | ||
pub unsafe fn try_lock(&self) -> bool { | ||
libc::pthread_mutex_trylock(self.inner.get()) == 0 | ||
} | ||
|
||
pub unsafe fn unlock(&self) { | ||
let result = libc::pthread_mutex_unlock(self.inner.get()); | ||
debug_assert_eq!(result, 0); | ||
} | ||
|
||
pub unsafe fn destroy(&self) { | ||
let result = libc::pthread_mutex_destroy(self.inner.get()); | ||
debug_assert_eq!(result, 0); | ||
} | ||
} |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
library/std/src/sys/unsupported/condvar.rs → .../std/src/sys/unsupported/locks/condvar.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
use crate::sys::mutex::Mutex; | ||
use crate::sys::locks::Mutex; | ||
use crate::time::Duration; | ||
|
||
pub struct Condvar {} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
mod condvar; | ||
mod mutex; | ||
mod rwlock; | ||
pub use condvar::{Condvar, MovableCondvar}; | ||
pub use mutex::{MovableMutex, Mutex, ReentrantMutex}; | ||
pub use rwlock::{MovableRWLock, RWLock}; |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.