Fix nanosleep returning negative rem

Corinna Vinschen corinna-cygwin@cygwin.com
Wed Jul 21 08:39:39 GMT 2021


Hi David,

On Jul 20 16:16, David Allsopp wrote:
> I've pushed a repro case for this to
> https://github.com/dra27/cygwin-nanosleep-bug.git
> 
> Originally noticed as the main CI system for OCaml has been failing
> sporadically for the signal.ml test mentioned in that repo. This morning I
> tried hammering that test on my dev machine and discovered that it fails
> very frequently. No idea if that's drivers, Windows 10 updates, number of
> cores or what, but it was definitely happening, and easily.
> 
> Drilling further, it appears that NtQueryTimer is able to return a negative
> value in the TimeRemaining field even when SignalState is false. The values
> I've seen have always been < 15ms - i.e. less than the timer resolution, so
> I wonder if there is a point at which the timer has elapsed but has not been
> signalled, but WaitForMultipleObjects returns because of the EINTR signal.
> Mildly surprising that it seems to be so reproducible.
> 
> Anyway, a patch is attached which simply guards a negative return value. The
> test on tbi.SignalState is in theory unnecessary.

Thanks for the patch, I think your patch is fine.  However, I'd like
to dig a bit into this to see what exactly happens.  Do you have a
very simple testcase in plain C, by any chance?


Thanks,
Corinna


More information about the Cygwin-patches mailing list