rustix/backend/libc/thread/
futex.rs1use crate::backend::c;
2
3bitflags::bitflags! {
4 #[repr(transparent)]
8 #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
9 pub struct Flags: u32 {
10 const PRIVATE = bitcast!(c::FUTEX_PRIVATE_FLAG);
12 const CLOCK_REALTIME = bitcast!(c::FUTEX_CLOCK_REALTIME);
14
15 const _ = !0;
17 }
18}
19
20bitflags::bitflags! {
21 #[repr(transparent)]
29 #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
30 pub struct WaitFlags: u32 {
31 const SIZE_U8 = linux_raw_sys::general::FUTEX2_SIZE_U8;
33 const SIZE_U16 = linux_raw_sys::general::FUTEX2_SIZE_U16;
35 const SIZE_U32 = linux_raw_sys::general::FUTEX2_SIZE_U32;
37 const SIZE_U64 = linux_raw_sys::general::FUTEX2_SIZE_U64;
39 const SIZE_MASK = linux_raw_sys::general::FUTEX2_SIZE_MASK;
41
42 const NUMA = linux_raw_sys::general::FUTEX2_NUMA;
44
45 const PRIVATE = linux_raw_sys::general::FUTEX2_PRIVATE;
47
48 const _ = !0;
50 }
51}
52
53#[derive(Debug, Copy, Clone, Eq, PartialEq)]
55#[repr(u32)]
56pub(crate) enum Operation {
57 Wait = bitcast!(c::FUTEX_WAIT),
59 Wake = bitcast!(c::FUTEX_WAKE),
61 Fd = bitcast!(c::FUTEX_FD),
63 Requeue = bitcast!(c::FUTEX_REQUEUE),
65 CmpRequeue = bitcast!(c::FUTEX_CMP_REQUEUE),
67 WakeOp = bitcast!(c::FUTEX_WAKE_OP),
69 LockPi = bitcast!(c::FUTEX_LOCK_PI),
71 UnlockPi = bitcast!(c::FUTEX_UNLOCK_PI),
73 TrylockPi = bitcast!(c::FUTEX_TRYLOCK_PI),
75 WaitBitset = bitcast!(c::FUTEX_WAIT_BITSET),
77 WakeBitset = bitcast!(c::FUTEX_WAKE_BITSET),
79 WaitRequeuePi = bitcast!(c::FUTEX_WAIT_REQUEUE_PI),
81 CmpRequeuePi = bitcast!(c::FUTEX_CMP_REQUEUE_PI),
83 LockPi2 = bitcast!(c::FUTEX_LOCK_PI2),
85}
86
87pub const WAITERS: u32 = linux_raw_sys::general::FUTEX_WAITERS;
89
90pub const OWNER_DIED: u32 = linux_raw_sys::general::FUTEX_OWNER_DIED;