changeset 4575:1061fde50418

(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.
author Paul Eggert <eggert@cs.ucla.edu>
date Sun, 17 Aug 2003 00:09:27 +0000
parents e374460ac6ae
children 08a754a6e236
files m4/c-stack.m4
diffstat 1 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/m4/c-stack.m4
+++ b/m4/c-stack.m4
@@ -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 @@
 	 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");
 	 }