bug-gnulib
[Top][All Lists]
Advanced

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

Re: MacOS problem with "checking whether strcasestr works in linear time


From: Eric Blake
Subject: Re: MacOS problem with "checking whether strcasestr works in linear time"
Date: Mon, 9 Jun 2008 15:34:09 -0700 (PDT)

> Could it be that the process was started with SIGALRM inherited as ignored?

I'm betting this is the case, as I was able to reproduce a "hanging"
configure on OpenBSD with:
 trap '' ALRM; ./gnulib-tool --with-tests --test strstr

And explicitly resetting SIGALRM in the .m4 files avoided the hang.
I'm committing this.

The corresponding tests/test-strstr.c and friends can continue to
use alarm() in an environment with SIGALRM ignored, rather than
also doing the signal reset, because a) we should already be using
the linear gnulib replacement which should be fast enough to never
trip the alarm, and b) if we aren't, the user will hopefully notice
that 'make check' is taking forever and file a bug report.

It's a bummer that POSIX forbids the 'trap' command from resetting
an ignored signal to something useful in a non-interactive shell,
otherwise I'd be tempted to go one step further and propose a
patch for autoconf that tries to use 'trap' to restore SIGALRM to
default behavior.


From: Eric Blake <address@hidden>
Date: Mon, 9 Jun 2008 16:21:34 -0600
Subject: [PATCH] Work around environments that (stupidly) ignore SIGALRM.

* m4/strstr.m4 (gl_FUNC_STRSTR): Reset SIGALRM to default handling
before using alarm().
* m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise.
* m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise.
Reported by Ian Beckwith <address@hidden>.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog        |    7 +++++++
 m4/memmem.m4     |    4 +++-
 m4/strcasestr.m4 |    4 +++-
 m4/strstr.m4     |    4 +++-
 4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 736b1f2..0295048 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-06-09  Eric Blake  <address@hidden>
 
+       Work around environments that (stupidly) ignore SIGALRM.
+       * m4/strstr.m4 (gl_FUNC_STRSTR): Reset SIGALRM to default handling
+       before using alarm().
+       * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise.
+       * m4/memmem.m4 (gl_FUNC_MEMMEM): Likewise.
+       Reported by Ian Beckwith <address@hidden>.
+
        Produce autobuild blurb earlier in log.
        * modules/autobuild (configure.ac-early): Move AB_INIT here.
 
diff --git a/m4/memmem.m4 b/m4/memmem.m4
index d8c1230..87ab663 100644
--- a/m4/memmem.m4
+++ b/m4/memmem.m4
@@ -1,4 +1,4 @@
-# memmem.m4 serial 12
+# memmem.m4 serial 13
 dnl Copyright (C) 2002, 2003, 2004, 2007, 2008 Free Software Foundation,
Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -27,6 +27,7 @@ AC_DEFUN([gl_FUNC_MEMMEM],
     AC_CACHE_CHECK([whether memmem works in linear time],
       [gl_cv_func_memmem_works],
       [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h> /* for signal */
 #include <string.h> /* for memmem */
 #include <stdlib.h> /* for malloc */
 #include <unistd.h> /* for alarm */
@@ -36,6 +37,7 @@ AC_DEFUN([gl_FUNC_MEMMEM],
     void *result = 0;
     /* Failure to compile this test due to missing alarm is okay,
        since all such platforms (mingw) also lack memmem.  */
+    signal (SIGALRM, SIG_DFL);
     alarm (5);
     /* Check for quadratic performance.  */
     if (haystack && needle)
diff --git a/m4/strcasestr.m4 b/m4/strcasestr.m4
index 0ad895a..e1e5390 100644
--- a/m4/strcasestr.m4
+++ b/m4/strcasestr.m4
@@ -1,4 +1,4 @@
-# strcasestr.m4 serial 11
+# strcasestr.m4 serial 12
 dnl Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -26,6 +26,7 @@ AC_DEFUN([gl_FUNC_STRCASESTR],
     AC_CACHE_CHECK([whether strcasestr works in linear time],
       [gl_cv_func_strcasestr_linear],
       [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h> /* for signal */
 #include <string.h> /* for memmem */
 #include <stdlib.h> /* for malloc */
 #include <unistd.h> /* for alarm */
@@ -35,6 +36,7 @@ AC_DEFUN([gl_FUNC_STRCASESTR],
     void *result = 0;
     /* Failure to compile this test due to missing alarm is okay,
        since all such platforms (mingw) also lack strcasestr.  */
+    signal (SIGALRM, SIG_DFL);
     alarm (5);
     /* Check for quadratic performance.  */
     if (haystack && needle)
diff --git a/m4/strstr.m4 b/m4/strstr.m4
index 67b93c9..f48bebb 100644
--- a/m4/strstr.m4
+++ b/m4/strstr.m4
@@ -1,4 +1,4 @@
-# strstr.m4 serial 4
+# strstr.m4 serial 5
 dnl Copyright (C) 2008 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,6 +11,7 @@ AC_DEFUN([gl_FUNC_STRSTR],
   AC_CACHE_CHECK([whether strstr works in linear time],
     [gl_cv_func_strstr_linear],
     [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h> /* for signal */
 #include <string.h> /* for memmem */
 #include <stdlib.h> /* for malloc */
 #include <unistd.h> /* for alarm */
@@ -20,6 +21,7 @@ AC_DEFUN([gl_FUNC_STRSTR],
     void *result = 0;
     /* Failure to compile this test due to missing alarm is okay,
        since all such platforms (mingw) also have quadratic strstr.  */
+    signal (SIGALRM, SIG_DFL);
     alarm (5);
     /* Check for quadratic performance.  */
     if (haystack && needle)
-- 
1.5.5.1


-- 
View this message in context: 
http://www.nabble.com/MacOS-problem-with-%22checking-whether-strcasestr-works-in-linear-time%22-tp17723695p17743705.html
Sent from the Gnulib mailing list archive at Nabble.com.





reply via email to

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