Make CLOCK_MONOTONIC handling more precise in pal_threading.c (#50441)
authorAlexander Köplinger <alex.koeplinger@outlook.com>
Tue, 30 Mar 2021 23:42:47 +0000 (01:42 +0200)
committerGitHub <noreply@github.com>
Tue, 30 Mar 2021 23:42:47 +0000 (01:42 +0200)
commit6d817d9681d44c25421bd3907b0435785b87519c
tree369f21b9645bbf929e8a4701e03389fbcb39f590
parentdb7e04d23e3026b691c24e2b21224b5fa8ee3f43
Make CLOCK_MONOTONIC handling more precise in pal_threading.c (#50441)

The root cause of the problem in https://github.com/dotnet/runtime/pull/50388 turned out to be because we do not have `pthread_condattr_setclock(..., CLOCK_MONOTONIC);` on iOS.
This caused the timeout argument for `pthread_cond_timedwait` to be interpreted as an _absolute system time_ (in seconds since the Unix epoch), however the value we got back from `clock_gettime(CLOCK_MONOTONIC, ...)` was actually some value based on the uptime of the system.
Since the uptime is much smaller than the system time the wait immediately returned.

Harden the handling by adding a check for `HAVE_PTHREAD_CONDATTR_SETCLOCK` like we already do in `SystemNative_LowLevelMonitor_Create()`
src/libraries/Native/Unix/System.Native/pal_threading.c