https://github.com/python/cpython/commit/e5e186609fdd74bc53e8478da22b76440d996baa
commit: e5e186609fdd74bc53e8478da22b76440d996baa
branch: main
author: Matt Prodani <[email protected]>
committer: erlend-aasland <[email protected]>
date: 2024-01-30T22:22:17+01:00
summary:
gh-112606: Use pthread_cond_timedwait_relative_np() in parking_lot.c when
available (#112616)
Add a configure define for HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP and
replaces pthread_cond_timedwait() with pthread_cond_timedwait_relative_np()
for relative time when supported in semaphore waiting logic.
files:
M Python/parking_lot.c
M configure
M configure.ac
M pyconfig.h.in
diff --git a/Python/parking_lot.c b/Python/parking_lot.c
index d44c1b4b93b4d2..c83d7443e289c5 100644
--- a/Python/parking_lot.c
+++ b/Python/parking_lot.c
@@ -158,11 +158,15 @@ _PySemaphore_PlatformWait(_PySemaphore *sema, _PyTime_t
timeout)
if (sema->counter == 0) {
if (timeout >= 0) {
struct timespec ts;
-
+#if defined(HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP)
+ _PyTime_AsTimespec_clamp(timeout, &ts);
+ err = pthread_cond_timedwait_relative_np(&sema->cond,
&sema->mutex, &ts);
+#else
_PyTime_t deadline = _PyTime_Add(_PyTime_GetSystemClock(),
timeout);
_PyTime_AsTimespec_clamp(deadline, &ts);
err = pthread_cond_timedwait(&sema->cond, &sema->mutex, &ts);
+#endif // HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP
}
else {
err = pthread_cond_wait(&sema->cond, &sema->mutex);
diff --git a/configure b/configure
index adc5a8f014c795..7b2119ff7f4f78 100755
--- a/configure
+++ b/configure
@@ -17871,6 +17871,12 @@ if test "x$ac_cv_func_preadv2" = xyes
then :
printf "%s\n" "#define HAVE_PREADV2 1" >>confdefs.h
+fi
+ac_fn_c_check_func "$LINENO" "pthread_cond_timedwait_relative_np"
"ac_cv_func_pthread_cond_timedwait_relative_np"
+if test "x$ac_cv_func_pthread_cond_timedwait_relative_np" = xyes
+then :
+ printf "%s\n" "#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP 1"
>>confdefs.h
+
fi
ac_fn_c_check_func "$LINENO" "pthread_condattr_setclock"
"ac_cv_func_pthread_condattr_setclock"
if test "x$ac_cv_func_pthread_condattr_setclock" = xyes
diff --git a/configure.ac b/configure.ac
index f5fa17fd8b7d0d..5bef2351c987e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4796,8 +4796,8 @@ AC_CHECK_FUNCS([ \
mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \
pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn
posix_spawnp \
posix_spawn_file_actions_addclosefrom_np \
- pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill
ptsname ptsname_r \
- pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \
+ pread preadv preadv2 pthread_cond_timedwait_relative_np
pthread_condattr_setclock pthread_init \
+ pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat
readv realpath renameat \
rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \
sched_setparam sched_setscheduler sem_clockwait sem_getvalue sem_open \
sem_timedwait sem_unlink sendfile setegid seteuid setgid sethostname \
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 02e33c7007196d..b22740710bcbee 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -936,6 +936,10 @@
/* Define to 1 if you have the `pthread_condattr_setclock' function. */
#undef HAVE_PTHREAD_CONDATTR_SETCLOCK
+/* Define to 1 if you have the `pthread_cond_timedwait_relative_np' function.
+ */
+#undef HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP
+
/* Defined for Solaris 2.6 bug in pthread header. */
#undef HAVE_PTHREAD_DESTRUCTOR
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]