summaryrefslogtreecommitdiff
path: root/gnulib-m4/pthread_sigmask.m4
diff options
context:
space:
mode:
Diffstat (limited to 'gnulib-m4/pthread_sigmask.m4')
-rw-r--r--gnulib-m4/pthread_sigmask.m477
1 files changed, 4 insertions, 73 deletions
diff --git a/gnulib-m4/pthread_sigmask.m4 b/gnulib-m4/pthread_sigmask.m4
index 437869f6..77991d4f 100644
--- a/gnulib-m4/pthread_sigmask.m4
+++ b/gnulib-m4/pthread_sigmask.m4
@@ -1,9 +1,10 @@
# pthread_sigmask.m4
-# serial 23
-dnl Copyright (C) 2011-2024 Free Software Foundation, Inc.
+# 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,
dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
[
@@ -96,7 +97,7 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
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
])
@@ -198,76 +199,6 @@ int main ()
[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
])