gh-108724: Use _PyTime_GetMonotonicClock() in parking_lot.c#112222
gh-108724: Use _PyTime_GetMonotonicClock() in parking_lot.c#112222vstinner wants to merge 1 commit intopython:mainfrom
Conversation
Using a system clock causes issues when it's being updated by the system administrator, NTP, Daylight Saving Time, or anything else. Sadly, on Windows, the monotonic clock resolution is around 15.6 ms. Example: python#85876
|
@colesbury @ericsnowcurrently: Please don't use the system clock for locks. It causes too many issues. Using a monotonic clock is more reliable. Sadly, on Windows, the monotonic clock has a resolution of 15.6 ms. |
colesbury
left a comment
There was a problem hiding this comment.
We should use the monotonic clock when available, but this change isn't sufficient:
sem_timedwaitdoes not work with CLOCK_MONOTONIC. (Needsem_clockwaitif available)pthread_cond_tneeds to be initialized with the right attribute
| _PyTime_t deadline = _PyTime_Add(_PyTime_GetMonotonicClock(), timeout); | ||
| _PyTime_AsTimespec(deadline, &ts); | ||
|
|
||
| err = sem_timedwait(&sema->platform_sem, &ts); |
There was a problem hiding this comment.
Maybe:
# ifdef HAVE_SEM_CLOCKWAIT
_PyTime_t deadline = _PyDeadline_Init(timeout);
_PyTime_AsTimespec_clamp(deadline, &ts);
err = sem_clockwait(&sema->platform_sem, CLOCK_MONOTONIC, &ts);
# else
_PyTime_t deadline = _PyTime_Add(_PyTime_GetSystemClock(), timeout);
_PyTime_AsTimespec_clamp(deadline, &ts);
err = sem_timedwait(&sema->platform_sem, &ts);
#endif|
Oh. I made a mechanical change to avoid _PyTime_GetSystemClock(). I didn't see that timestamps are passed to existing functions such as pthread_cond_timedwait(). I mark my PR as a draft for now and will try to update it to address Sam's review |
|
I don't have time to fix my PR right now. I may try again later ;-) |
|
I wrote it up as an issue so that I don't forget about this and in case someone else wants to tackle it first: #112606 |
Using a system clock causes issues when it's being updated by the system administrator, NTP, Daylight Saving Time, or anything else. Sadly, on Windows, the monotonic clock resolution is around 15.6 ms.
Example: #85876