From 6e6eb242188e8312a6a8a78e6be0d11cd1036610 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Wed, 18 Mar 2026 21:17:10 +0000 Subject: MacOS doesn't have pthread_mutex_timedlock -_- --- CONTRIBUTING | 28 +++++++++++++++++++++- configure | 3 ++- package/deps.mak | 2 +- src/libposixplz/pthread_mutex_tailock.c | 41 +++++++++++++++++++++++++++++++++ src/libstddjb/pthread_mutex_tailock.c | 28 ---------------------- src/sysdeps/trypthreadmutexclocklock.c | 4 ++-- src/sysdeps/trypthreadmutextimedlock.c | 11 +++++++++ 7 files changed, 84 insertions(+), 33 deletions(-) create mode 100644 src/libposixplz/pthread_mutex_tailock.c delete mode 100644 src/libstddjb/pthread_mutex_tailock.c create mode 100644 src/sysdeps/trypthreadmutextimedlock.c diff --git a/CONTRIBUTING b/CONTRIBUTING index 6279422..3173998 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -1,5 +1,31 @@ - Please add a Signed-Off-By: line at the end of your commit, +- License + + Your contributions to this project are governed by the ISC license. + Please review the COPYING file for this project. + + +- Contribution terms + + When making a contribution you agree to the following terms: + + * I, the contributor, am the copyright owner of these changes + * I submit these changes according to the project's license +with no additionam requirements + * I understand these changes in full and will be able to respond +to review comments. + + Please add a Signed-Off-By: line at the end of your commits, which certifies that you have the right and authority to pass it on as an open-source patch, as explicited in the Developer's Certificate of Origin available in this project's DCO file, or at https://developercertificate.org/ + + +- AI policy + + This project does not accept contributions generated by LLMs +(large language models), sometimes also referred to as "AI". + This policy is not open to discussion. Any content submitted that is +clearly labelled as LLM-generated will be immediately closed, and any +attempt to bypass this policy in any way will result in a ban from the +project. diff --git a/configure b/configure index 7905631..dd00e76 100755 --- a/configure +++ b/configure @@ -722,7 +722,8 @@ choose cl prctl 'prctl()' choose cl procctl 'procctl()' choose cl kevent 'kevent()' choose cl kqueue1 'kqueue1()' -choose cl pthreadmutexclocklock 'pthread_mutex_clocklock()' +choose cl pthreadmutextimedlock 'pthread_mutex_timedlock()' $pthread_lib +choose cl pthreadmutexclocklock 'pthread_mutex_clocklock()' $pthread_lib # Here are the evil irreducible run-time sysdeps. choose clr devurandom '/dev/urandom' diff --git a/package/deps.mak b/package/deps.mak index 5d90012..e9eb270 100644 --- a/package/deps.mak +++ b/package/deps.mak @@ -209,6 +209,7 @@ src/libposixplz/mkptemp.o src/libposixplz/mkptemp.lo: src/libposixplz/mkptemp.c src/libposixplz/mkptemp2.o src/libposixplz/mkptemp2.lo: src/libposixplz/mkptemp2.c src/include/skalibs/posixplz.h src/libposixplz/mkptemp3.o src/libposixplz/mkptemp3.lo: src/libposixplz/mkptemp3.c src/include/skalibs/djbunix.h src/include/skalibs/fcntl.h src/include/skalibs/posixplz.h src/libposixplz/munmap_void.o src/libposixplz/munmap_void.lo: src/libposixplz/munmap_void.c src/include/skalibs/posixplz.h +src/libposixplz/pthread_mutex_tailock.o src/libposixplz/pthread_mutex_tailock.lo: src/libposixplz/pthread_mutex_tailock.c src/include/skalibs/pthread.h src/include/skalibs/sysdeps.h src/include/skalibs/tai.h src/libposixplz/qsortr.o src/libposixplz/qsortr.lo: src/libposixplz/qsortr.c src/include/skalibs/functypes.h src/include/skalibs/nonposix.h src/include/skalibs/posixplz.h src/include/skalibs/sysdeps.h src/libposixplz/setgroups.o src/libposixplz/setgroups.lo: src/libposixplz/setgroups.c src/include/skalibs/nonposix.h src/include/skalibs/posixishard.h src/include/skalibs/setgroups.h src/include/skalibs/sysdeps.h src/libposixplz/strcasestr.o src/libposixplz/strcasestr.lo: src/libposixplz/strcasestr.c src/include/skalibs/bytestr.h src/include/skalibs/sysdeps.h @@ -507,7 +508,6 @@ src/libstddjb/openwritevnclose_suffix6.o src/libstddjb/openwritevnclose_suffix6. src/libstddjb/openwritevnclose_unsafe5.o src/libstddjb/openwritevnclose_unsafe5.lo: src/libstddjb/openwritevnclose_unsafe5.c src/include/skalibs/djbunix.h src/include/skalibs/posixplz.h src/libstddjb/path_canonicalize.o src/libstddjb/path_canonicalize.lo: src/libstddjb/path_canonicalize.c src/include/skalibs/djbunix.h src/libstddjb/pipe_internal.o src/libstddjb/pipe_internal.lo: src/libstddjb/pipe_internal.c src/include/skalibs/djbunix.h src/include/skalibs/fcntl.h src/include/skalibs/nonposix.h src/include/skalibs/sysdeps.h -src/libstddjb/pthread_mutex_tailock.o src/libstddjb/pthread_mutex_tailock.lo: src/libstddjb/pthread_mutex_tailock.c src/include/skalibs/pthread.h src/include/skalibs/sysdeps.h src/include/skalibs/tai.h src/libstddjb/readnclose.o src/libstddjb/readnclose.lo: src/libstddjb/readnclose.c src/include/skalibs/allreadwrite.h src/include/skalibs/djbunix.h src/libstddjb/rm_rf.o src/libstddjb/rm_rf.lo: src/libstddjb/rm_rf.c src/include/skalibs/djbunix.h src/include/skalibs/skamisc.h src/libstddjb/rm_rf_in_tmp.o src/libstddjb/rm_rf_in_tmp.lo: src/libstddjb/rm_rf_in_tmp.c src/include/skalibs/djbunix.h src/include/skalibs/stralloc.h diff --git a/src/libposixplz/pthread_mutex_tailock.c b/src/libposixplz/pthread_mutex_tailock.c new file mode 100644 index 0000000..736921c --- /dev/null +++ b/src/libposixplz/pthread_mutex_tailock.c @@ -0,0 +1,41 @@ +/* ISC license. */ + +#include +#include +#include + +#include +#include +#include + +#ifdef SKALIBS_HASPTHREADMUTEXTIMEDLOCK + +int pthread_mutex_tailock (pthread_mutex_t *mtx, tain const *deadline, tain *stamp) +{ + int e ; + struct timespec ts ; + tain tto ; + if (!stamp) return pthread_mutex_lock(mtx) ; + tain_sub(&tto, deadline, stamp) ; + if (!timespec_from_tain_relative(&ts, &tto)) return errno ; +#ifdef SKALIBS_HASPTHREADMUTEXCLOCKLOCK + if (&tain_now != &tain_wallclock_read) + e = pthread_mutex_clocklock(mtx, CLOCK_MONOTONIC, &ts) ; + else +#else + e = pthread_mutex_timedlock(mtx, &ts) ; +#endif + tain_now(stamp) ; + return e ; +} + +#else + +int pthread_mutex_tailock (pthread_mutex_t *mtx, tain const *deadline, tain *stamp) +{ + (void)deadline ; + (void)stamp ; + return pthread_mutex_lock(mtx) ; +} + +#endif diff --git a/src/libstddjb/pthread_mutex_tailock.c b/src/libstddjb/pthread_mutex_tailock.c deleted file mode 100644 index 8f8fbf3..0000000 --- a/src/libstddjb/pthread_mutex_tailock.c +++ /dev/null @@ -1,28 +0,0 @@ -/* ISC license. */ - -#include -#include -#include - -#include -#include -#include - -int pthread_mutex_tailock (pthread_mutex_t *mtx, tain const *deadline, tain *stamp) -{ - int e ; - struct timespec ts ; - tain tto ; - if (!stamp) return pthread_mutex_lock(mtx) ; - tain_sub(&tto, deadline, stamp) ; - if (!timespec_from_tain_relative(&ts, &tto)) return errno ; -#ifdef SKALIBS_HASPTHREADMUTEXCLOCKLOCK - if (&tain_now != &tain_wallclock_read) - e = pthread_mutex_clocklock(mtx, CLOCK_MONOTONIC, &ts) ; - else -#else - e = pthread_mutex_timedlock(mtx, &ts) ; -#endif - tain_now(stamp) ; - return e ; -} diff --git a/src/sysdeps/trypthreadmutexclocklock.c b/src/sysdeps/trypthreadmutexclocklock.c index b102db2..4a84091 100644 --- a/src/sysdeps/trypthreadmutexclocklock.c +++ b/src/sysdeps/trypthreadmutexclocklock.c @@ -5,7 +5,7 @@ int main (void) { - pthread_mutex_t mtx = PTHREAD_MUTEX_INIT ; - strict timespec ts = { .tv_sec = 0, .tv_nsec = 1 } ; + pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER ; + struct timespec ts = { .tv_sec = 0, .tv_nsec = 1 } ; return pthread_mutex_clocklock(&mtx, CLOCK_MONOTONIC, &ts) ; } diff --git a/src/sysdeps/trypthreadmutextimedlock.c b/src/sysdeps/trypthreadmutextimedlock.c new file mode 100644 index 0000000..f76f198 --- /dev/null +++ b/src/sysdeps/trypthreadmutextimedlock.c @@ -0,0 +1,11 @@ +/* ISC license. */ + +#include +#include + +int main (void) +{ + pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER ; + struct timespec ts = { .tv_sec = 0, .tv_nsec = 1 } ; + return pthread_mutex_timedlock(&mtx, &ts) ; +} -- cgit v1.3.1