forked from proxmox-mirrors/proxmox
proxmox-shared-memory: depend on libc 0.2.107
Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
This commit is contained in:
parent
e3a14098f7
commit
ece92bde29
@ -10,7 +10,7 @@ exclude = [ "debian" ]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
libc = "0.2"
|
libc = "0.2.107"
|
||||||
nix = "0.19.1"
|
nix = "0.19.1"
|
||||||
|
|
||||||
proxmox = { path = "../proxmox", version = "0.15", default-features = false }
|
proxmox = { path = "../proxmox", version = "0.15", default-features = false }
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
use std::cell::UnsafeCell;
|
use std::cell::UnsafeCell;
|
||||||
use std::mem::MaybeUninit;
|
use std::mem::MaybeUninit;
|
||||||
|
|
||||||
//use anyhow::Error;
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct RawSharedMutex {
|
pub(crate) struct RawSharedMutex {
|
||||||
inner: UnsafeCell<libc::pthread_mutex_t>,
|
inner: UnsafeCell<libc::pthread_mutex_t>,
|
||||||
@ -26,7 +24,7 @@ impl RawSharedMutex {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
cvt_nz(libc::pthread_mutexattr_setpshared(attr.0.as_mut_ptr(), libc::PTHREAD_PROCESS_SHARED))
|
cvt_nz(libc::pthread_mutexattr_setpshared(attr.0.as_mut_ptr(), libc::PTHREAD_PROCESS_SHARED))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
cvt_nz(pthread_mutexattr_setrobust(attr.0.as_mut_ptr(), PTHREAD_MUTEX_ROBUST))
|
cvt_nz(libc::pthread_mutexattr_setrobust(attr.0.as_mut_ptr(), libc::PTHREAD_MUTEX_ROBUST))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
cvt_nz(libc::pthread_mutex_init(self.inner.get(), attr.0.as_ptr())).unwrap();
|
cvt_nz(libc::pthread_mutex_init(self.inner.get(), attr.0.as_ptr())).unwrap();
|
||||||
}
|
}
|
||||||
@ -35,7 +33,7 @@ impl RawSharedMutex {
|
|||||||
pub unsafe fn lock(&self) {
|
pub unsafe fn lock(&self) {
|
||||||
let mut r = libc::pthread_mutex_lock(self.inner.get());
|
let mut r = libc::pthread_mutex_lock(self.inner.get());
|
||||||
if r == libc::EOWNERDEAD {
|
if r == libc::EOWNERDEAD {
|
||||||
r = pthread_mutex_consistent(self.inner.get());
|
r = libc::pthread_mutex_consistent(self.inner.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_assert_eq!(r, 0);
|
debug_assert_eq!(r, 0);
|
||||||
@ -51,19 +49,11 @@ impl RawSharedMutex {
|
|||||||
pub unsafe fn try_lock(&self) -> bool {
|
pub unsafe fn try_lock(&self) -> bool {
|
||||||
let mut r = libc::pthread_mutex_trylock(self.inner.get());
|
let mut r = libc::pthread_mutex_trylock(self.inner.get());
|
||||||
if r == libc::EOWNERDEAD {
|
if r == libc::EOWNERDEAD {
|
||||||
r = pthread_mutex_consistent(self.inner.get());
|
r = libc::pthread_mutex_consistent(self.inner.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
r == 0
|
r == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
#[inline]
|
|
||||||
pub unsafe fn destroy(&self) {
|
|
||||||
let r = libc::pthread_mutex_destroy(self.inner.get());
|
|
||||||
debug_assert_eq!(r, 0);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -87,18 +77,3 @@ impl Drop for PthreadMutexAttr<'_> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Those thing need rust libc wrapper 0.2.105 (we have 0.2.94), so
|
|
||||||
// we import ourselves
|
|
||||||
|
|
||||||
pub const PTHREAD_MUTEX_ROBUST: libc::c_int = 1;
|
|
||||||
|
|
||||||
#[link(name = "c")]
|
|
||||||
extern {
|
|
||||||
fn pthread_mutexattr_setrobust(
|
|
||||||
attr: *mut libc::pthread_mutexattr_t,
|
|
||||||
robustness: libc::c_int,
|
|
||||||
) -> libc::c_int;
|
|
||||||
|
|
||||||
fn pthread_mutex_consistent(mutex: *mut libc::pthread_mutex_t) -> libc::c_int;
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user