Implement clockid_t handling to pthread_rwlock timeout
This commit is contained in:
@@ -2,7 +2,7 @@ use super::*;
|
||||
|
||||
use crate::header::errno::{EBUSY, EINVAL};
|
||||
|
||||
use crate::pthread::Pshared;
|
||||
use crate::{error::ResultExt, header::time::CLOCK_REALTIME, pthread::Pshared};
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_init(
|
||||
@@ -23,27 +23,52 @@ pub unsafe extern "C" fn pthread_rwlock_init(
|
||||
}
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_rdlock(rwlock: *mut pthread_rwlock_t) -> c_int {
|
||||
unsafe { get(rwlock) }.acquire_read_lock(None);
|
||||
|
||||
0
|
||||
unsafe { get(rwlock) }
|
||||
.acquire_read_lock(None)
|
||||
.map(|_| 0)
|
||||
.or_minus_one_errno()
|
||||
}
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_clockrdlock(
|
||||
rwlock: *mut pthread_rwlock_t,
|
||||
clock_id: clockid_t,
|
||||
abstime: *const timespec,
|
||||
) -> c_int {
|
||||
unsafe { get(rwlock) }
|
||||
.acquire_read_lock(Some((unsafe { &*abstime }, clock_id)))
|
||||
.map(|_| 0)
|
||||
.or_minus_one_errno()
|
||||
}
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_timedrdlock(
|
||||
rwlock: *mut pthread_rwlock_t,
|
||||
timeout: *const timespec,
|
||||
abstime: *const timespec,
|
||||
) -> c_int {
|
||||
unsafe { get(rwlock) }.acquire_read_lock(Some(unsafe { &*timeout }));
|
||||
|
||||
0
|
||||
unsafe { get(rwlock) }
|
||||
.acquire_read_lock(Some((unsafe { &*abstime }, CLOCK_REALTIME)))
|
||||
.map(|_| 0)
|
||||
.or_minus_one_errno()
|
||||
}
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_clockwrlock(
|
||||
rwlock: *mut pthread_rwlock_t,
|
||||
clock_id: clockid_t,
|
||||
abstime: *const timespec,
|
||||
) -> c_int {
|
||||
unsafe { get(rwlock) }
|
||||
.acquire_write_lock(Some((unsafe { &*abstime }, clock_id)))
|
||||
.map(|_| 0)
|
||||
.or_minus_one_errno()
|
||||
}
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_timedwrlock(
|
||||
rwlock: *mut pthread_rwlock_t,
|
||||
timeout: *const timespec,
|
||||
abstime: *const timespec,
|
||||
) -> c_int {
|
||||
unsafe { get(rwlock) }.acquire_write_lock(Some(unsafe { &*timeout }));
|
||||
|
||||
0
|
||||
unsafe { get(rwlock) }
|
||||
.acquire_write_lock(Some((unsafe { &*abstime }, CLOCK_REALTIME)))
|
||||
.map(|_| 0)
|
||||
.or_minus_one_errno()
|
||||
}
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_tryrdlock(rwlock: *mut pthread_rwlock_t) -> c_int {
|
||||
@@ -67,9 +92,10 @@ pub unsafe extern "C" fn pthread_rwlock_unlock(rwlock: *mut pthread_rwlock_t) ->
|
||||
}
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn pthread_rwlock_wrlock(rwlock: *mut pthread_rwlock_t) -> c_int {
|
||||
unsafe { get(rwlock) }.acquire_write_lock(None);
|
||||
|
||||
0
|
||||
unsafe { get(rwlock) }
|
||||
.acquire_write_lock(None)
|
||||
.map(|_| 0)
|
||||
.or_minus_one_errno()
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
|
||||
Reference in New Issue
Block a user