[PATCH 3/4] ntdll: Implement thread-ID alerts using futexes if possible.

Zebediah Figura zfigura at codeweavers.com
Wed Nov 17 20:30:12 CST 2021


On 11/17/21 2:52 AM, Paul Gofman wrote:
> On 11/17/21 11:48, Paul Gofman wrote:
>> 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, &timespec );
>>> +            }
>>> +            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.
>>
> Eh, please disregard the first part about EINTR, that doesn't relate to
> the present code.
> 

EINTR isn't relevant here, yes.

Complaining louder on unexpected errors is more reasonable, although 
we're in much greater control here relative to e.g. the old 
implementation of condition variables. I don't feel a pressing need to 
send a patch, but I won't object to one...



More information about the wine-devel mailing list