diff options
| author | Sam Varshavchik | 2020-10-27 20:01:00 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2020-10-27 20:01:00 -0400 | 
| commit | 38d7235ab45334e0c88f97c1e5bc7d4814f59669 (patch) | |
| tree | 8eed66b9d7bea4371d2ff93e201d17a6745be30f | |
| parent | 9db205e80a937095c2993022a81dd73c622ea2a4 (diff) | |
| download | courier-libs-38d7235ab45334e0c88f97c1e5bc7d4814f59669.tar.bz2 | |
Fix LTO failure on F33.
| -rw-r--r-- | waitlib/Makefile.am | 3 | ||||
| -rw-r--r-- | waitlib/configure.ac | 20 | ||||
| -rw-r--r-- | waitlib/testwait.c | 16 | ||||
| -rw-r--r-- | waitlib/testwait2.c | 9 | 
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() -{ -} | 
