Skip to content

parking_lot.c should use _PyTime_GetMonotonicClock() when available #112606

Description

@colesbury

Bug report

The _PySemaphore_PlatformWait function in parking_lot.c has three implementations:

  • WaitForSingleObjectEx (for Windows)
  • sem_timedwait (Linux and most other POSIX platforms)
  • pthread_cond_timedwait (macOS and possibly other platforms that don't have sem_timedwait)

We should follow the pattern used in thread_pthread.h where we prefer functions that support CLOCK_MONOTONIC. These are sem_clockwait and pthread_cond_timedwait after setting pthread_condattr_setclock.

Additionally, we should use _PyTime_AsTimespec_clamp instead of _PyTime_AsTimespec (we don't want to raise errors in these code paths).

Note that:

  1. Windows doesn't need any changes because WaitForSingleObjectEx isn't relative to any specific clock -- it just takes a timeout for N milliseconds in the future
  2. macOS doesn't support pthread_condattr_setclock, so we're stuck with the system clock on macOS. It's not clear to me if we use the pthread_cond_timedwait for any other OS.

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions