]> Savannah Git Hosting - gnulib.git/commitdiff
pthread-h: Fix override of pthread_spinlock_t with non-GNU compilers.
authorBruno Haible <bruno@clisp.org>
Thu, 28 Mar 2024 21:05:39 +0000 (22:05 +0100)
committerBruno Haible <bruno@clisp.org>
Mon, 8 Apr 2024 11:06:35 +0000 (13:06 +0200)
* m4/pthread-spin.m4 (gl_PTHREAD_SPIN): Define through AC_DEFUN_ONCE.
Require gl_PTHREAD_H_PART1, not gl_PTHREAD_H.
* m4/pthread_h.m4 (gl_PTHREAD_H_PART1): New macro, extracted from
gl_PTHREAD_H.
(gl_PTHREAD_H): Require it. Invoke gl_PTHREAD_SPIN.
* lib/pthread.in.h (pthread_spinlock_t,
GNULIB_defined_pthread_spin_types): Don't define if
HAVE_PTHREAD_SPIN_INIT && !REPLACE_PTHREAD_SPIN_INIT.
* modules/pthread-h (Files): Add m4/pthread-spin.m4.

ChangeLog
lib/pthread.in.h
m4/pthread-spin.m4
m4/pthread_h.m4
modules/pthread-h

index 690d0c8e1ed43af31737449f876faf6784e690f6..be46eefc672c302ab8c0c0f8ceb005b7ac8fe94c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2024-03-28  Bruno Haible  <bruno@clisp.org>
+
+       pthread-h: Fix override of pthread_spinlock_t with non-GNU compilers.
+       * m4/pthread-spin.m4 (gl_PTHREAD_SPIN): Define through AC_DEFUN_ONCE.
+       Require gl_PTHREAD_H_PART1, not gl_PTHREAD_H.
+       * m4/pthread_h.m4 (gl_PTHREAD_H_PART1): New macro, extracted from
+       gl_PTHREAD_H.
+       (gl_PTHREAD_H): Require it. Invoke gl_PTHREAD_SPIN.
+       * lib/pthread.in.h (pthread_spinlock_t,
+       GNULIB_defined_pthread_spin_types): Don't define if
+       HAVE_PTHREAD_SPIN_INIT && !REPLACE_PTHREAD_SPIN_INIT.
+       * modules/pthread-h (Files): Add m4/pthread-spin.m4.
+
 2024-03-28  Bruno Haible  <bruno@clisp.org>
 
        havelib: Recognize ELF platform despite SunPRO C on Linux.
index 48e083747885debc68c74a671be0649f626ca00d..81598616df5ae7eb0a342c344e908191c1c8dca8 100644 (file)
@@ -1,6 +1,6 @@
 /* Implement the most essential subset of POSIX 1003.1-2008 pthread.h.
 
-   Copyright (C) 2009-2023 Free Software Foundation, Inc.
+   Copyright (C) 2009-2024 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
@@ -417,16 +417,21 @@ typedef pthread_mutex_t pthread_spinlock_t;
 #else
 # if @HAVE_PTHREAD_SPINLOCK_T@
 /* <pthread.h> exists and defines pthread_spinlock_t.  */
-#  if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \
-          || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \
-         || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \
-              && !defined __ANDROID__) \
-             || __clang_major__ >= 3)) \
-        && !defined __ibmxl__)
+#  if !@HAVE_PTHREAD_SPIN_INIT@ || @REPLACE_PTHREAD_SPIN_INIT@
+/* If the 'pthread-spin' module is in use, it defines all the pthread_spin*
+   functions.  Prepare for it by overriding pthread_spinlock_t if that might
+   be needed.  */
+#   if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \
+           || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \
+          || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \
+               && !defined __ANDROID__) \
+              || __clang_major__ >= 3)) \
+         && !defined __ibmxl__)
 /* We can't use GCC built-ins.  Approximate spinlocks with mutexes.  */
-#   if !GNULIB_defined_pthread_spin_types
-#    define pthread_spinlock_t pthread_mutex_t
-#    define GNULIB_defined_pthread_spin_types 1
+#    if !GNULIB_defined_pthread_spin_types
+#     define pthread_spinlock_t pthread_mutex_t
+#     define GNULIB_defined_pthread_spin_types 1
+#    endif
 #   endif
 #  endif
 # else
index e00f9a8ce7ad65f4f125e440ec9fad169a750d4a..4eeb3e5e752c45f793b61f414bc861642e38437d 100644 (file)
@@ -1,12 +1,12 @@
-# pthread-spin.m4 serial 2.2
+# pthread-spin.m4 serial 2.3
 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-AC_DEFUN([gl_PTHREAD_SPIN],
+AC_DEFUN_ONCE([gl_PTHREAD_SPIN],
 [
-  AC_REQUIRE([gl_PTHREAD_H])
+  AC_REQUIRE([gl_PTHREAD_H_PART1])
   AC_REQUIRE([AC_CANONICAL_HOST])
 
   if { case "$host_os" in mingw*) true;; *) false;; esac; } \
index 0d536fc97a81d984fe856f2001637d955c7056df..dc72483140d0e9dc0fbdbb4a51a51131cbae4ace 100644 (file)
@@ -1,10 +1,10 @@
-# pthread_h.m4 serial 8
-dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+# pthread_h.m4 serial 8.1
+dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-AC_DEFUN_ONCE([gl_PTHREAD_H],
+AC_DEFUN_ONCE([gl_PTHREAD_H_PART1],
 [
   dnl Ensure to expand the default settings once only, before all statements
   dnl that occur in other macros.
@@ -41,6 +41,14 @@ AC_DEFUN_ONCE([gl_PTHREAD_H],
   if test $ac_cv_type_pthread_spinlock_t != yes; then
     HAVE_PTHREAD_SPINLOCK_T=0
   fi
+])
+
+AC_DEFUN([gl_PTHREAD_H],
+[
+  AC_REQUIRE([gl_PTHREAD_H_PART1])
+
+  dnl Set HAVE_PTHREAD_SPIN_INIT, REPLACE_PTHREAD_SPIN_INIT.
+  gl_PTHREAD_SPIN
 
   dnl Constants may be defined as C preprocessor macros or as enum items.
 
index 6daa6d02a70c8fad7fe6250a4bd75ad2ba01609c..241671404c19cfb2fc60b7fcc716507cc2e88be3 100644 (file)
@@ -5,6 +5,7 @@ Files:
 lib/pthread.in.h
 m4/pthread_h.m4
 m4/threadlib.m4
+m4/pthread-spin.m4
 
 Depends-on:
 extensions