2025-09-10 Bruno Haible <bruno@clisp.org>
+ pthread_sigmask: Remove support for IRIX.
+ * lib/pthread_sigmask.c: Remove workaround for
+ PTHREAD_SIGMASK_UNBLOCK_BUG.
+ * m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Remove test against
+ IRIX bug.
+
*printf-posix: Remove support for IRIX.
* m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS, gl_PRINTF_ENOMEM,
gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_DIRECTIVE_N,
# pthread_sigmask.m4
-# serial 23
+# serial 24
dnl Copyright (C) 2011-2025 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
HAVE_PTHREAD_SIGMASK=0
dnl Define the symbol rpl_pthread_sigmask, not pthread_sigmask,
dnl so as to not accidentally override the system's pthread_sigmask
- dnl symbol from libpthread. This is necessary on IRIX 6.5.
+ dnl symbol from libpthread.
REPLACE_PTHREAD_SIGMASK=1
fi
])
[Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno.])
;;
esac
-
- dnl On IRIX 6.5, in a single-threaded program, pending signals are not
- dnl immediately delivered when they are unblocked through pthread_sigmask,
- dnl only a little while later.
- AC_CACHE_CHECK([whether pthread_sigmask unblocks signals correctly],
- [gl_cv_func_pthread_sigmask_unblock_works],
- [
- case "$host_os" in
- irix*)
- gl_cv_func_pthread_sigmask_unblock_works="guessing no";;
- *)
- gl_cv_func_pthread_sigmask_unblock_works="guessing yes";;
- esac
- m4_ifdef([gl_][THREADLIB],
- [dnl Link against $LIBMULTITHREAD, not only $PTHREAD_SIGMASK_LIB.
- dnl Otherwise we get a false positive on those platforms where
- dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no".
- gl_saved_LIBS=$LIBS
- LIBS="$LIBS $LIBMULTITHREAD"])
- AC_RUN_IFELSE(
- [AC_LANG_SOURCE([[
-#include <limits.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-]GL_MDA_DEFINES[
-static volatile int sigint_occurred;
-static void
-sigint_handler (int sig)
-{
- sigint_occurred++;
-}
-int main ()
-{
- sigset_t set;
- pid_t pid = getpid ();
- char command[80];
- if (LONG_MAX < pid)
- return 6;
- signal (SIGINT, sigint_handler);
- sigemptyset (&set);
- sigaddset (&set, SIGINT);
- if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0))
- return 1;
- sprintf (command, "sh -c 'sleep 1; kill -INT %ld' &", (long) pid);
- if (!(system (command) == 0))
- return 2;
- sleep (2);
- if (!(sigint_occurred == 0))
- return 3;
- if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0))
- return 4;
- if (!(sigint_occurred == 1)) /* This fails on IRIX. */
- return 5;
- return 0;
-}]])],
- [:],
- [gl_cv_func_pthread_sigmask_unblock_works=no],
- [:])
- m4_ifdef([gl_][THREADLIB], [LIBS=$gl_saved_LIBS])
- ])
- case "$gl_cv_func_pthread_sigmask_unblock_works" in
- *no)
- REPLACE_PTHREAD_SIGMASK=1
- AC_DEFINE([PTHREAD_SIGMASK_UNBLOCK_BUG], [1],
- [Define to 1 if pthread_sigmask() unblocks signals incorrectly.])
- ;;
- esac
fi
])