linux: futex v1 API cleanup
* Use `packed struct` for flags arguments. So, instead of
`linux.FUTEX.WAIT` use `.{ .cmd = .WAIT, .private = true }`
* rename `futex_wait` and `futex_wake` which didn't actually specify
wait/wake, as `futex_3arg` and `futex_4arg` (as its the number
of parameters that is different, the `op` is whatever is specified.
* expose the full six-arg flavor of the syscall (for some of the advanced
ops), and add packed structs for their arguments.
* Use a `packed union` to support the 4th parameter which is sometimes a
`timespec` pointer, and sometimes a `u32`.
* Add tests that make sure the structure layout is correct and that the
basic argument passing is working (no actual futexes are contended).
This commit is contained in:
@@ -1539,10 +1539,10 @@ const LinuxThreadImpl = struct {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (linux.E.init(linux.futex_wait(
|
||||
switch (linux.E.init(linux.futex_4arg(
|
||||
&self.thread.child_tid.raw,
|
||||
linux.FUTEX.WAIT,
|
||||
tid,
|
||||
.{ .cmd = .WAIT, .private = false },
|
||||
@bitCast(tid),
|
||||
null,
|
||||
))) {
|
||||
.SUCCESS => continue,
|
||||
|
||||
Reference in New Issue
Block a user