emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r117188: Don't substitute sigprocmask for pthread_si


From: Paul Eggert
Subject: [Emacs-diffs] trunk r117188: Don't substitute sigprocmask for pthread_sigmask.
Date: Thu, 29 May 2014 15:05:12 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117188
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/17561
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Thu 2014-05-29 08:05:06 -0700
message:
  Don't substitute sigprocmask for pthread_sigmask.
  
  sigprocmask isn't portable in a multithreaded process.
  * configure.ac (gl_THREADLIB): Remove dummy.
  Merge from gnulib, incorporating:
  2014-05-28 pthread_sigmask, timer-time: use gl_THREADLIB only if needed
  * m4/pthread_sigmask.m4, m4/timer_time.m4: Update from gnulib.
  * src/Makefile.in (LIB_PTHREAD_SIGMASK): Remove; all uses removed.
modified:
  ChangeLog                      changelog-20091113204419-o5vbwnq5f7feedwu-1538
  configure.ac                   
configure.in-20091113204419-o5vbwnq5f7feedwu-783
  m4/pthread_sigmask.m4          
pthread_sigmask.m4-20110706175601-0s7lvj1px2jwqvv1-2
  m4/timer_time.m4               timer_time.m4-20120927005931-6jg4s8b0e95i96hz-1
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/Makefile.in                makefile.in-20091113204419-o5vbwnq5f7feedwu-631
=== modified file 'ChangeLog'
--- a/ChangeLog 2014-05-29 01:36:44 +0000
+++ b/ChangeLog 2014-05-29 15:05:06 +0000
@@ -1,3 +1,12 @@
+2014-05-29  Paul Eggert  <address@hidden>
+
+       Don't substitute sigprocmask for pthread_sigmask (Bug#17561).
+       sigprocmask isn't portable in a multithreaded process.
+       * configure.ac (gl_THREADLIB): Remove dummy.
+       Merge from gnulib, incorporating:
+       2014-05-28 pthread_sigmask, timer-time: use gl_THREADLIB only if needed
+       * m4/pthread_sigmask.m4, m4/timer_time.m4: Update from gnulib.
+
 2014-05-29  Glenn Morris  <address@hidden>
 
        * configure.ac: Explicitly drop some ancient Solaris versions.

=== modified file 'configure.ac'
--- a/configure.ac      2014-05-29 01:36:44 +0000
+++ b/configure.ac      2014-05-29 15:05:06 +0000
@@ -704,8 +704,6 @@
 # Avoid gnulib's tests for HAVE_WORKING_O_NOATIME and HAVE_WORKING_O_NOFOLLOW,
 # as we don't use them.
 AC_DEFUN([gl_FCNTL_O_FLAGS])
-# Avoid gnulib's threadlib module, as we do threads our own way.
-AC_DEFUN([gl_THREADLIB])
 
 # Initialize gnulib right after choosing the compiler.
 dnl Amongst other things, this sets AR and ARFLAGS.

=== modified file 'm4/pthread_sigmask.m4'
--- a/m4/pthread_sigmask.m4     2014-01-01 07:43:34 +0000
+++ b/m4/pthread_sigmask.m4     2014-05-29 15:05:06 +0000
@@ -1,4 +1,4 @@
-# pthread_sigmask.m4 serial 13
+# pthread_sigmask.m4 serial 14
 dnl Copyright (C) 2011-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -97,39 +97,43 @@
     dnl with -lpthread, the pthread_sigmask() function always returns 0 and has
     dnl no effect.
     if test -z "$LIB_PTHREAD_SIGMASK"; then
-      AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread],
-        [gl_cv_func_pthread_sigmask_in_libc_works],
-        [
-          AC_RUN_IFELSE(
-            [AC_LANG_SOURCE([[
-#include <pthread.h>
-#include <signal.h>
-#include <stddef.h>
-int main ()
-{
-  sigset_t set;
-  sigemptyset (&set);
-  return pthread_sigmask (1729, &set, NULL) != 0;
-}]])],
-            [gl_cv_func_pthread_sigmask_in_libc_works=no],
-            [gl_cv_func_pthread_sigmask_in_libc_works=yes],
-            [
-changequote(,)dnl
-             case "$host_os" in
-               freebsd* | hpux* | solaris | solaris2.[2-9]*)
-                 gl_cv_func_pthread_sigmask_in_libc_works="guessing no";;
-               *)
-                 gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";;
-             esac
-changequote([,])dnl
-            ])
-        ])
-      case "$gl_cv_func_pthread_sigmask_in_libc_works" in
-        *no)
-          REPLACE_PTHREAD_SIGMASK=1
-          AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1],
-            [Define to 1 if pthread_sigmask() may returns 0 and have no 
effect.])
-          ;;
+      case " $LIBS " in
+        *' -lpthread '*) ;;
+       *)
+         AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread],
+           [gl_cv_func_pthread_sigmask_in_libc_works],
+           [
+             AC_RUN_IFELSE(
+               [AC_LANG_SOURCE([[
+                  #include <pthread.h>
+                  #include <signal.h>
+                  #include <stddef.h>
+                  int main ()
+                  {
+                    sigset_t set;
+                    sigemptyset (&set);
+                    return pthread_sigmask (1729, &set, NULL) != 0;
+                  }]])],
+               [gl_cv_func_pthread_sigmask_in_libc_works=no],
+               [gl_cv_func_pthread_sigmask_in_libc_works=yes],
+               [
+                changequote(,)dnl
+                case "$host_os" in
+                  freebsd* | hpux* | solaris | solaris2.[2-9]*)
+                    gl_cv_func_pthread_sigmask_in_libc_works="guessing no";;
+                  *)
+                    gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";;
+                esac
+                changequote([,])dnl
+               ])
+           ])
+         case "$gl_cv_func_pthread_sigmask_in_libc_works" in
+           *no)
+             REPLACE_PTHREAD_SIGMASK=1
+             AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1],
+               [Define to 1 if pthread_sigmask may return 0 and have no 
effect.])
+             ;;
+         esac;;
       esac
     fi
 
@@ -184,11 +188,12 @@
           *)
             gl_cv_func_pthread_sigmask_unblock_works="guessing yes";;
         esac
-        dnl Here we link against $LIBMULTITHREAD, not only 
$LIB_PTHREAD_SIGMASK,
-        dnl otherwise we get a false positive on those platforms where
-        dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no".
-        gl_save_LIBS="$LIBS"
-        LIBS="$LIBS $LIBMULTITHREAD"
+        m4_ifdef([gl_][THREADLIB],
+          [dnl Link against $LIBMULTITHREAD, not only $LIB_PTHREAD_SIGMASK.
+           dnl Otherwise we get a false positive on those platforms where
+           dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no".
+           gl_save_LIBS=$LIBS
+           LIBS="$LIBS $LIBMULTITHREAD"])
         AC_RUN_IFELSE(
           [AC_LANG_SOURCE([[
 #include <pthread.h>
@@ -227,7 +232,7 @@
           [:],
           [gl_cv_func_pthread_sigmask_unblock_works=no],
           [:])
-        LIBS="$gl_save_LIBS"
+        m4_ifdef([gl_][THREADLIB], [LIBS=$gl_save_LIBS])
       ])
     case "$gl_cv_func_pthread_sigmask_unblock_works" in
       *no)

=== modified file 'm4/timer_time.m4'
--- a/m4/timer_time.m4  2014-02-24 07:12:42 +0000
+++ b/m4/timer_time.m4  2014-05-29 15:05:06 +0000
@@ -1,4 +1,4 @@
-# timer_time.m4 serial 2
+# timer_time.m4 serial 3
 dnl Copyright (C) 2011-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -11,7 +11,12 @@
   dnl Based on clock_time.m4. See details there.
 
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-  AC_REQUIRE([gl_THREADLIB])
+
+  dnl Test whether the gnulib module 'threadlib' is in use.
+  dnl Some packages like Emacs use --avoid=threadlib.
+  dnl Write the symbol in such a way that it does not cause 'aclocal' to pick
+  dnl the threadlib.m4 file that is installed in $PREFIX/share/aclocal/.
+  m4_ifdef([gl_][THREADLIB], [AC_REQUIRE([gl_][THREADLIB])])
 
   LIB_TIMER_TIME=
   AC_SUBST([LIB_TIMER_TIME])
@@ -19,21 +24,21 @@
     AC_SEARCH_LIBS([timer_settime], [rt posix4],
                    [test "$ac_cv_search_timer_settime" = "none required" ||
                     LIB_TIMER_TIME=$ac_cv_search_timer_settime])
-    dnl GLIBC uses threads to emulate posix timers when kernel support
-    dnl is not available (like Linux < 2.6 or when used with kFreeBSD)
-    dnl Now the pthread lib is linked automatically in the normal case,
-    dnl but when linking statically, it needs to be explicitly specified.
-    AC_EGREP_CPP([Thread],
-      [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || (__GLIBC__ > 2)) \
-     && !(__UCLIBC__ && __HAS_NO_THREADS__)
-  Thread emulation available
- #endif
-#endif
-      ],
-      [LIB_TIMER_TIME="$LIB_TIMER_TIME $LIBMULTITHREAD"])
+    m4_ifdef([gl_][THREADLIB],
+      [dnl GLIBC uses threads to emulate posix timers when kernel support
+       dnl is not available (like Linux < 2.6 or when used with kFreeBSD)
+       dnl Now the pthread lib is linked automatically in the normal case,
+       dnl but when linking statically, it needs to be explicitly specified.
+       AC_EGREP_CPP([Thread],
+         [#include <features.h>
+          #ifdef __GNU_LIBRARY__
+           #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || (__GLIBC__ > 2)) \
+               && !(__UCLIBC__ && __HAS_NO_THREADS__)
+            Thread emulation available
+           #endif
+          #endif
+         ],
+         [LIB_TIMER_TIME="$LIB_TIMER_TIME $LIBMULTITHREAD"])])
     AC_CHECK_FUNCS([timer_settime])
   LIBS=$gl_saved_libs
 ])

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-05-29 14:52:47 +0000
+++ b/src/ChangeLog     2014-05-29 15:05:06 +0000
@@ -1,3 +1,8 @@
+2014-05-29  Paul Eggert  <address@hidden>
+
+       Don't substitute sigprocmask for pthread_sigmask (Bug#17561).
+       * Makefile.in (LIB_PTHREAD_SIGMASK): Remove; all uses removed.
+
 2014-05-29  Eli Zaretskii  <address@hidden>
 
        * buffer.c (init_buffer): Accept an argument 'initialized'.

=== modified file 'src/Makefile.in'
--- a/src/Makefile.in   2014-05-27 17:31:17 +0000
+++ b/src/Makefile.in   2014-05-29 15:05:06 +0000
@@ -125,7 +125,7 @@
 ## -lm, or empty.
 address@hidden@
 
-## -lpthreads, or empty.
+## -lpthread, or empty.
 address@hidden@
 
 address@hidden@ @LIBJPEG@ @LIBPNG@ @LIBGIF@ @LIBXPM@
@@ -293,8 +293,6 @@
 LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
 LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
 
-LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
-
 INTERVALS_H = dispextern.h intervals.h composite.h
 
 GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
@@ -413,7 +411,7 @@
    $(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \
    $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
    $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
-   $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) $(LIB_PTHREAD_SIGMASK) \
+   $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) \
    $(GFILENOTIFY_LIBS) $(LIB_MATH) $(LIBZ)
 
 all: emacs$(EXEEXT) $(OTHER_FILES)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]