Author: jonathan
Date: 2005-09-08 10:56:53 -0400 (Thu, 08 Sep 2005)
New Revision: 276
Modified:
trunk/configure
trunk/configure.in
trunk/daemon/config.h.in
trunk/daemon/memory.c
trunk/daemon/mutex.h
trunk/examples/user.c
trunk/libspread/sp.c
Log:
Apply warning fix patch from Neil Conway.
Add configure check for pthread_atfork function so it will only be used if supported by pthread library.
If it does not exist, then forking threaded spread client programs is not safe from deadlocks.
Modified: trunk/configure
===================================================================
--- trunk/configure 2005-09-01 19:27:47 UTC (rev 275)
+++ trunk/configure 2005-09-08 14:56:53 UTC (rev 276)
@@ -3570,6 +3570,108 @@
THLIBS=$LIBS
+
+for ac_func in pthread_atfork
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
LIBS=$OLDLIBS
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2005-09-01 19:27:47 UTC (rev 275)
+++ trunk/configure.in 2005-09-08 14:56:53 UTC (rev 276)
@@ -93,6 +93,8 @@
AC_CHECK_LIB(posix4, sem_wait, , )
THLIBS=$LIBS
AC_SUBST(THLIBS)
+dnl Check for pthread functions
+AC_CHECK_FUNCS(pthread_atfork)
LIBS=$OLDLIBS
AC_CHECK_LIB(nsl, gethostbyaddr, , )
Modified: trunk/daemon/config.h.in
===================================================================
--- trunk/daemon/config.h.in 2005-09-01 19:27:47 UTC (rev 275)
+++ trunk/daemon/config.h.in 2005-09-08 14:56:53 UTC (rev 276)
@@ -37,6 +37,9 @@
/* Define if libc defines __progname */
#undef HAVE___PROGNAME
+/* Define if pthread library supports pthread_atfork */
+#undef HAVE_PTHREAD_ATFORK
+
/* Data types */
#undef ARCH_PC_WIN95
#undef ARCH_SCATTER_NONE
Modified: trunk/daemon/memory.c
===================================================================
--- trunk/daemon/memory.c 2005-09-01 19:27:47 UTC (rev 275)
+++ trunk/daemon/memory.c 2005-09-08 14:56:53 UTC (rev 276)
@@ -105,8 +105,11 @@
static mem_info Mem[MAX_MEM_OBJECTS];
-static bool Initialized;
+#ifndef NDEBUG
+ static bool Initialized;
+#endif
+
#ifdef SPREAD_STATUS
static bool MemStatus_initialized;
#endif
Modified: trunk/daemon/mutex.h
===================================================================
--- trunk/daemon/mutex.h 2005-09-01 19:27:47 UTC (rev 275)
+++ trunk/daemon/mutex.h 2005-09-08 14:56:53 UTC (rev 276)
@@ -36,6 +36,8 @@
#ifndef INC_MUTEX
#define INC_MUTEX
+#include "arch.h"
+
#ifndef _REENTRANT
#define MUTEX_STATIC_INIT 0
@@ -66,7 +68,11 @@
#define Mutex_unlock( mutex ) pthread_mutex_unlock( mutex )
#define Mutex_trylock( mutex ) pthread_mutex_trylock( mutex )
-#define Mutex_atfork( prepare, parent, child ) pthread_atfork( prepare, parent, child )
+#ifdef HAVE_PTHREAD_ATFORK
+# define Mutex_atfork( prepare, parent, child ) pthread_atfork( prepare, parent, child )
+#else
+# define Mutex_atfork( prepare, parent, child )
+#endif
#else /* ARCH_PC_WIN95 */
Modified: trunk/examples/user.c
===================================================================
--- trunk/examples/user.c 2005-09-01 19:27:47 UTC (rev 275)
+++ trunk/examples/user.c 2005-09-08 14:56:53 UTC (rev 276)
@@ -101,10 +101,6 @@
static void Print_help();
static void Bye();
-static int ip_authenticate( char * auth_data)
-{
- return(1);
-}
int main( int argc, char *argv[] )
{
int ret;
Modified: trunk/libspread/sp.c
===================================================================
--- trunk/libspread/sp.c 2005-09-01 19:27:47 UTC (rev 275)
+++ trunk/libspread/sp.c 2005-09-08 14:56:53 UTC (rev 276)
@@ -172,6 +172,8 @@
/* We take the Struct_mutex in prepare to prevent inconsistent state
* in Session[] structs in child
*/
+#ifdef HAVE_PTHREAD_ATFORK
+
static void sp_atfork_prepare(void)
{
@@ -196,6 +198,9 @@
}
}
+
+#endif /* HAVE_PTHREAD_ATFORK */
+
static void sp_initialize_locks(void)
{
int ret, i;
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.