Mercurial > hg > octave-nkf > gnulib-hg
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"); }