summaryrefslogtreecommitdiffstats
path: root/waitlib
diff options
context:
space:
mode:
authorSam Varshavchik2020-10-27 20:01:00 -0400
committerSam Varshavchik2020-10-27 20:01:00 -0400
commit38d7235ab45334e0c88f97c1e5bc7d4814f59669 (patch)
tree8eed66b9d7bea4371d2ff93e201d17a6745be30f /waitlib
parent9db205e80a937095c2993022a81dd73c622ea2a4 (diff)
downloadcourier-libs-38d7235ab45334e0c88f97c1e5bc7d4814f59669.tar.bz2
Fix LTO failure on F33.
Diffstat (limited to 'waitlib')
-rw-r--r--waitlib/Makefile.am3
-rw-r--r--waitlib/configure.ac20
-rw-r--r--waitlib/testwait.c16
-rw-r--r--waitlib/testwait2.c9
4 files changed, 35 insertions, 13 deletions
diff --git a/waitlib/Makefile.am b/waitlib/Makefile.am
index 33be798..a743c58 100644
--- a/waitlib/Makefile.am
+++ b/waitlib/Makefile.am
@@ -10,9 +10,10 @@ EXTRA_DIST=confwait.c
libwaitlib_la_SOURCES=waitlib.c waitlib.h waitlib2.c
-testwait_SOURCES=testwait.c testwait2.c
+testwait_SOURCES=testwait.c
testwait_DEPENDENCIES=libwaitlib.la
testwait_LDADD=libwaitlib.la
+testwait_CFLAGS=@PTHREAD@
check-am:
./testwait
diff --git a/waitlib/configure.ac b/waitlib/configure.ac
index d475dee..c40846d 100644
--- a/waitlib/configure.ac
+++ b/waitlib/configure.ac
@@ -106,4 +106,24 @@ then
CFLAGS="-Wall $CFLAGS"
fi
+save_CFLAGS="$CFLAGS"
+
+AC_CACHE_CHECK([for -pthread flag],waitlib_cv_PTHREAD,
+ CFLAGS="$CFLAGS -pthread"
+ AC_TRY_COMPILE([],[],
+ [
+ waitlib_cv_PTHREAD='yes'
+ ],
+ [
+ waitlib_cv_PTHREAD='no'
+ ]))
+CFLAGS="$save_CFLAGS"
+
+PTHREAD=''
+if test "$waitlib_cv_PTHREAD" = "yes"
+then
+ PTHREAD="$CFLAGS -pthread"
+fi
+AC_SUBST(PTHREAD)
+
AC_OUTPUT(Makefile)
diff --git a/waitlib/testwait.c b/waitlib/testwait.c
index fb0fe48..6020c36 100644
--- a/waitlib/testwait.c
+++ b/waitlib/testwait.c
@@ -1,5 +1,5 @@
/*
-** Copyright 1998 - 2006 Double Precision, Inc.
+** Copyright 1998 - 2020 Double Precision, Inc.
** See COPYING for distribution information.
*/
@@ -10,17 +10,24 @@
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
+#include <pthread.h>
/* Stress test waitlib.c */
#define NUMCHILDREN 100 /* Start 100 child processes */
#define INITCHILDREN 10 /* Start with these many child procs */
+pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+
static unsigned started, finished;
static void reap_child(pid_t p, int dummy)
{
+ pthread_mutex_lock(&mutex);
++finished;
+ pthread_cond_signal(&cond);
+ pthread_mutex_unlock(&mutex);
}
static RETSIGTYPE sighandler(int sig)
@@ -87,13 +94,16 @@ char c;
; /* Shut gcc up */
close(pipefd[1]);
close(pipefd2[0]);
-
while (started < NUMCHILDREN)
if (start_child() == 0)
_exit(0);
alarm(30);
+ pthread_mutex_lock(&mutex);
while (finished < started)
- foobar();
+ {
+ pthread_cond_wait(&cond, &mutex);
+ }
+ pthread_mutex_unlock(&mutex);
exit(0);
}
diff --git a/waitlib/testwait2.c b/waitlib/testwait2.c
deleted file mode 100644
index f64cc78..0000000
--- a/waitlib/testwait2.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
-** Copyright 1998 - 1999 Double Precision, Inc.
-** See COPYING for distribution information.
-*/
-
-
-void foobar()
-{
-}