]> Savannah Git Hosting - gnulib.git/commitdiff
pthread-mutex: Fix errors in C++ mode.
authorBruno Haible <bruno@clisp.org>
Thu, 21 Nov 2019 10:44:01 +0000 (11:44 +0100)
committerBruno Haible <bruno@clisp.org>
Thu, 21 Nov 2019 10:44:01 +0000 (11:44 +0100)
* m4/pthread-mutex.m4 (gl_PTHREAD_MUTEX): Test whether
pthread_mutexattr_getrobust exists. If not, define
PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED.
* lib/pthread-mutex.c (pthread_mutexattr_getrobust,
pthread_mutexattr_setrobust): Define also if <pthread.h> exists but
PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED.
* modules/pthread-mutex (configure.ac): Compile pthread-mutex.c also
when <pthread.h> exists but pthread_mutexattr_getrobust needs a gnulib
definition.

ChangeLog
lib/pthread-mutex.c
m4/pthread-mutex.m4
modules/pthread-mutex

index 1217f3175570b2728f9afddd25a36e0ac1f1048f..4d99aca6a80c5959deea305ad292b411ca209278 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2019-11-21  Bruno Haible  <bruno@clisp.org>
+
+       pthread-mutex: Fix errors in C++ mode.
+       * m4/pthread-mutex.m4 (gl_PTHREAD_MUTEX): Test whether
+       pthread_mutexattr_getrobust exists. If not, define
+       PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED.
+       * lib/pthread-mutex.c (pthread_mutexattr_getrobust,
+       pthread_mutexattr_setrobust): Define also if <pthread.h> exists but
+       PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED.
+       * modules/pthread-mutex (configure.ac): Compile pthread-mutex.c also
+       when <pthread.h> exists but pthread_mutexattr_getrobust needs a gnulib
+       definition.
+
 2019-11-19  Bruno Haible  <bruno@clisp.org>
 
        threads-h tests: Fix typo.
index 7a6fc1a722a67cba98c5d14748e3abcb5d7a7676..96a225daee2b4a96fe6383dc8f088bd18269d04c 100644 (file)
@@ -82,6 +82,25 @@ pthread_mutexattr_destroy (pthread_mutexattr_t *attr _GL_UNUSED)
   return 0;
 }
 
+#elif PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED
+
+int
+pthread_mutexattr_getrobust (const pthread_mutexattr_t *attr, int *robustp)
+{
+  *robustp = PTHREAD_MUTEX_STALLED;
+  return 0;
+}
+
+int
+pthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int robust)
+{
+  if (!(robust == PTHREAD_MUTEX_STALLED || robust == PTHREAD_MUTEX_ROBUST))
+    return EINVAL;
+  if (!(robust == PTHREAD_MUTEX_STALLED))
+    return ENOTSUP;
+  return 0;
+}
+
 #endif
 
 #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS
index c7d74f96e5a272c2eab3b696cbbd818162c3edb3..abe5f2ffd8448cffefc29b764ec1995c8efee79e 100644 (file)
@@ -1,4 +1,4 @@
-# pthread-mutex.m4 serial 1
+# pthread-mutex.m4 serial 2
 dnl Copyright (C) 2019 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -39,6 +39,33 @@ AC_DEFUN([gl_PTHREAD_MUTEX],
       dnl HAVE_PTHREAD_MUTEX_TIMEDLOCK is set in pthread_mutex_timedlock.m4.
       HAVE_PTHREAD_MUTEX_UNLOCK=0
       HAVE_PTHREAD_MUTEX_DESTROY=0
+    else
+      AC_CACHE_CHECK([for pthread_mutexattr_getrobust],
+        [gl_cv_func_pthread_mutexattr_getrobust],
+        [saved_LIBS="$LIBS"
+         LIBS="$LIBS $LIBMULTITHREAD"
+         AC_LINK_IFELSE(
+           [AC_LANG_SOURCE(
+              [[extern
+                #ifdef __cplusplus
+                "C"
+                #endif
+                int pthread_mutexattr_getrobust (void);
+                int main ()
+                {
+                  return pthread_mutexattr_getrobust ();
+                }
+              ]])],
+           [gl_cv_func_pthread_mutexattr_getrobust=yes],
+           [gl_cv_func_pthread_mutexattr_getrobust=no])
+         LIBS="$saved_LIBS"
+        ])
+      if test $gl_cv_func_pthread_mutexattr_getrobust = no; then
+        HAVE_PTHREAD_MUTEXATTR_GETROBUST=0
+        HAVE_PTHREAD_MUTEXATTR_SETROBUST=0
+        AC_DEFINE([PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED], [1],
+          [Define if the 'robust' attribute of pthread_mutex* doesn't exist.])
+      fi
     fi
   fi
 ])
index 8e64a9e2eb3c8dcaf9adb9c2d52907fceeea0bcd..71496b7f9c2fb737c0fa9e27b4faeb45f43cb203 100644 (file)
@@ -13,7 +13,8 @@ windows-timedrecmutex   [test $gl_threads_api = windows]
 
 configure.ac:
 gl_PTHREAD_MUTEX
-if test $HAVE_PTHREAD_MUTEX_INIT = 0 || test $REPLACE_PTHREAD_MUTEX_INIT = 1; then
+if test $HAVE_PTHREAD_MUTEX_INIT = 0 || test $REPLACE_PTHREAD_MUTEX_INIT = 1 \
+   || test $HAVE_PTHREAD_MUTEXATTR_GETROBUST = 0 || test $REPLACE_PTHREAD_MUTEXATTR_GETROBUST = 1; then
   AC_LIBOBJ([pthread-mutex])
 fi
 gl_PTHREAD_MODULE_INDICATOR([pthread-mutex])