On 2/15/21 2:03 PM, Gabriel Krisman Bertazi wrote: > André Almeida writes: > >> Add support to wait on multiple futexes. This is the interface >> implemented by this syscall: >> >> futex_waitv(struct futex_waitv *waiters, unsigned int nr_futexes, >> unsigned int flags, struct timespec *timo) >> >> struct futex_waitv { >> void *uaddr; >> unsigned int val; >> unsigned int flags; >> }; >> >> Given an array of struct futex_waitv, wait on each uaddr. The thread >> wakes if a futex_wake() is performed at any uaddr. The syscall returns >> immediately if any waiter has *uaddr != val. *timo is an optional >> timeout value for the operation. The flags argument of the syscall >> should be used solely for specifying the timeout as realtime, if needed. >> Flags for shared futexes, sizes, etc. should be used on the individual >> flags of each waiter. > > Given the previous proposal from Zebediah, one use case Wine has to > support is the ability to wait on all (instead of any) of a list of > futexes . I suppose that could be done by a new FLAG_WAITALL passed on > the third argument of the syscall. > I don't think that such a feature would help Wine very much. It doesn't fix any of the correctness problems with the futex-backed implementation of NT primitives, and given the rarity of the wait-on-all operation I'm inclined to believe it won't help performance either.