summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2023-09-11 07:09:48 +0000
committerLaurent Bercot <ska@appnovation.com>2023-09-11 07:09:48 +0000
commit822bf267121b8e380037da3db4ad31aca34fc7c7 (patch)
tree34777dfe83dc7c9a58034b31ec25dacdce9a54c9
parent252e2ad869637ca3ef8690854a8fac784b869ec9 (diff)
downloadskalibs-822bf267121b8e380037da3db4ad31aca34fc7c7.tar.xz
Add a pthread sysdep
Signed-off-by: Laurent Bercot <ska@appnovation.com>
-rwxr-xr-xconfigure9
-rw-r--r--src/sysdeps/trypthread.c24
2 files changed, 29 insertions, 4 deletions
diff --git a/configure b/configure
index 748e70d..1e058c0 100755
--- a/configure
+++ b/configure
@@ -597,10 +597,11 @@ fi
echo "$socket_lib" > $sysdeps/socket.lib
trylibs clockrt sysclock 'clock_gettime()' -lrt
-choose cl clockmon CLOCK_MONOTONIC `cat "${sysdeps}/sysclock.lib"`
-choose cl clockboot CLOCK_BOOTTIME `cat "${sysdeps}/sysclock.lib"`
+choose cl clockmon CLOCK_MONOTONIC $sysclock_lib
+choose cl clockboot CLOCK_BOOTTIME $sysclock_lib
trylibs posixspawn spawn 'posix_spawn()' -lrt
trylibs timer timer 'timer_create()' -lrt
+trylibs pthread pthread 'pthread support' -lpthread -lrt
tryendianness
trytypes
@@ -640,11 +641,11 @@ choose cl explicit_bzero 'explicit_bzero()'
choose cl getrandom 'getrandom()'
choose cl grndinsecure 'GRND_INSECURE'
choose cl chroot 'chroot()'
-choose cl posixspawnsetsid 'POSIX_SPAWN_SETSID' ${spawn_lib}
+choose cl posixspawnsetsid 'POSIX_SPAWN_SETSID' $spawn_lib
# Here are the evil irreducible run-time sysdeps.
choose clr devurandom '/dev/urandom'
-choose clr posixspawnearlyreturn 'posix_spawn() incorrectly returning early' ${spawn_lib}
+choose clr posixspawnearlyreturn 'posix_spawn() incorrectly returning early' $spawn_lib
# Finally, produce config.mak and config.h
diff --git a/src/sysdeps/trypthread.c b/src/sysdeps/trypthread.c
new file mode 100644
index 0000000..8e2e459
--- /dev/null
+++ b/src/sysdeps/trypthread.c
@@ -0,0 +1,24 @@
+/* ISC license. */
+
+#include <time.h>
+#include <pthread.h>
+
+void *pstart (void *)
+{
+ return 0 ;
+}
+
+int main (void)
+{
+ pthread_t th ;
+ pthread_attr_t attr ;
+ pthread_cond_t cond = PTHREAD_COND_INITIALIZER ;
+ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER ;
+ struct timespec ts = { .tv_sec = 1, .tv_nsec = 0 } ;
+ void *p ;
+ int e = pthread_attr_init(&attr) ;
+ e = pthread_create(&th, &attr, &pstart, 0) ;
+ e = pthread_cond_timedwait(&cond, &mutex, &ts) ;
+ e = pthread_join(th, &p) ;
+ return 0 ;
+}