[PATCH 3/4] ntdll: Implement thread-ID alerts using futexes if possible.
Paul Gofman
pgofman at codeweavers.com
Wed Nov 17 02:48:06 CST 2021
On 11/17/21 06:50, Zebediah Figura wrote:
> + while (!InterlockedExchange( futex, 0 ))
> + {
> + if (timeout)
> + {
> + LONGLONG timeleft = update_timeout( end );
> + struct timespec timespec;
> +
> + timespec.tv_sec = timeleft / (ULONGLONG)TICKSPERSEC;
> + timespec.tv_nsec = (timeleft % TICKSPERSEC) * 100;
> + ret = futex_wait( futex, 0, ×pec );
> + }
> + else
> + ret = futex_wait( futex, 0, NULL );
> +
> + if (ret == -1 && errno == ETIMEDOUT) return STATUS_TIMEOUT;
> + }
> + return STATUS_ALERTED;
> + }
> +#endif
> +
Do you think it is possible or makes sense to handle EINTR and retry
wait to avoid delivering spurious wakeups to the application in this
case? We have a lot of SIGUSR1 for Wine async I/O handling. Also, maybe
it would be interesting to log unexpected errors? Not that anything
besides EINTR should ever happen as I understand, but sometimes
unexpected errors happen and may indicate a real issue and that happened
once in the past with the current upstream in process sync.
More information about the wine-devel
mailing list