bug-gnulib
[Top][All Lists]
Advanced

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

[Bug-gnulib] c-stack merge from coreutils


From: Paul Eggert
Subject: [Bug-gnulib] c-stack merge from coreutils
Date: 16 Aug 2003 17:12:46 -0700
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3

I installed these changes from coreutils:

2003-08-16  Jim Meyering  <address@hidden>

        * c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Limit stack size
        to 1MB, so as not to render systems with no stack size limit (e.g.,
        linux-2.2.x) unusable.  Suggestion and code from Bruno Haible.
        Include <unistd.h>.  On some systems,
        it is required for the definition of _SC_PAGESIZE.

Index: m4/c-stack.m4
===================================================================
RCS file: /cvsroot/gnulib/gnulib/m4/c-stack.m4,v
retrieving revision 1.2
diff -p -u -r1.2 c-stack.m4
--- m4/c-stack.m4       31 Dec 2002 13:43:06 -0000      1.2
+++ m4/c-stack.m4       17 Aug 2003 00:07:57 -0000
@@ -1,6 +1,6 @@
 # Check prerequisites for compiling lib/c-stack.c.
 
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -22,13 +22,20 @@
 AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC],
   [# for STACK_DIRECTION
    AC_REQUIRE([AC_FUNC_ALLOCA])
+   AC_CHECK_FUNCS(setrlimit)
 
    AC_CACHE_CHECK([for working C stack overflow detection],
      ac_cv_sys_xsi_stack_overflow_heuristic,
      [AC_TRY_RUN(
        [
+        #include <unistd.h>
         #include <signal.h>
         #include <ucontext.h>
+        #if HAVE_SETRLIMIT
+        # include <sys/types.h>
+        # include <sys/time.h>
+        # include <sys/resource.h>
+        #endif
 
         static union
         {
@@ -101,6 +108,16 @@ AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEUR
         int
         main (void)
         {
+          #if HAVE_SETRLIMIT && defined RLIMIT_STACK
+          /* Before starting the endless recursion, try to be friendly
+             to the user's machine.  On some Linux 2.2.x systems, there
+             is no stack limit for user processes at all.  We don't want
+             to kill such systems.  */
+          struct rlimit rl;
+          rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */
+          setrlimit (RLIMIT_STACK, &rl);
+          #endif
+
           c_stack_action ();
           return recurse ("\1");
         }




reply via email to

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