jay-compositor 1.15.0

The Jay compositor
use jay_algorithms::oserror::OsError;
use jay_algorithms::oserror::OsErrorExt;
use std::sync::atomic::AtomicU32;
use uapi::c;
use uapi::map_err;

pub fn futex_wait(v: &AtomicU32, e: u32) -> Result<(), OsError> {
    let res = unsafe {
        c::syscall(
            c::SYS_futex,
            v.as_ptr().expose_provenance(),
            (c::FUTEX_WAIT | c::FUTEX_PRIVATE_FLAG) as usize,
            e as usize,
            0 as usize,
        )
    };
    map_err!(res).map(drop).to_os_error()
}

pub fn futex_wake(v: &AtomicU32) -> Result<(), OsError> {
    let res = unsafe {
        c::syscall(
            c::SYS_futex,
            v.as_ptr().expose_provenance(),
            (c::FUTEX_WAKE | c::FUTEX_PRIVATE_FLAG) as usize,
            c::INT_MAX as usize,
        )
    };
    map_err!(res).map(drop).to_os_error()
}