gh-112606: Use sem_clockwait with monotonic time when supported in parking_lot.c (gh-112733)

This commit is contained in:
Matt Prodani 2023-12-06 01:54:57 -05:00 committed by GitHub
parent d384813ff1
commit a2a46f9f1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 2 deletions

View File

@ -118,10 +118,19 @@ _PySemaphore_PlatformWait(_PySemaphore *sema, _PyTime_t timeout)
if (timeout >= 0) { if (timeout >= 0) {
struct timespec ts; struct timespec ts;
#if defined(CLOCK_MONOTONIC) && defined(HAVE_SEM_CLOCKWAIT)
_PyTime_t deadline = _PyTime_Add(_PyTime_GetMonotonicClock(), 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_t deadline = _PyTime_Add(_PyTime_GetSystemClock(), timeout);
_PyTime_AsTimespec(deadline, &ts);
_PyTime_AsTimespec_clamp(deadline, &ts);
err = sem_timedwait(&sema->platform_sem, &ts); err = sem_timedwait(&sema->platform_sem, &ts);
#endif
} }
else { else {
err = sem_wait(&sema->platform_sem); err = sem_wait(&sema->platform_sem);
@ -151,7 +160,7 @@ _PySemaphore_PlatformWait(_PySemaphore *sema, _PyTime_t timeout)
struct timespec ts; struct timespec ts;
_PyTime_t deadline = _PyTime_Add(_PyTime_GetSystemClock(), timeout); _PyTime_t deadline = _PyTime_Add(_PyTime_GetSystemClock(), timeout);
_PyTime_AsTimespec(deadline, &ts); _PyTime_AsTimespec_clamp(deadline, &ts);
err = pthread_cond_timedwait(&sema->cond, &sema->mutex, &ts); err = pthread_cond_timedwait(&sema->cond, &sema->mutex, &ts);
} }