From 7be78020e3baaa73d047af75675ea6c92c1c1fda Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 7 Dec 2012 22:56:26 -0800 Subject: [PATCH] Simplify get_lim_data. * admin/CPP-DEFINES (ULIMIT_BREAK_VALUE): Remove. * configure.ac (ULIMIT_BREAK_VALUE): Remove. * src/vm-limit.c (get_lim_data): Combine RLIMIT_AS and RLIMIT_DATA methods. Remove USG and vlimit methods; no longer used these days. Add #error catchall just in case. --- ChangeLog | 3 ++ admin/CPP-DEFINES | 1 - admin/ChangeLog | 5 ++++ configure.ac | 14 --------- src/ChangeLog | 5 ++++ src/vm-limit.c | 75 ++++++++++------------------------------------- 6 files changed, 28 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index cb63adc41d..c0ab1e03b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-12-08 Paul Eggert + Simplify get_lim_data. + * configure.ac (ULIMIT_BREAK_VALUE): Remove. + Assume POSIX 1003.1-1988 or later for signal.h (Bug#13026). * configure.ac (PTY_OPEN, PTY_TTY_NAME_SPRINTF): Use SIGCHLD rather than SIGCLD. diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES index b71102960e..13c3da1745 100644 --- a/admin/CPP-DEFINES +++ b/admin/CPP-DEFINES @@ -429,7 +429,6 @@ TERM TIME_WITH_SYS_TIME TIOCSIGSEND TM_IN_SYS_TIME -ULIMIT_BREAK_VALUE UNIX98_PTYS USE_TOOLKIT_SCROLL_BARS USG_SUBTTY_WORKS diff --git a/admin/ChangeLog b/admin/ChangeLog index 840c38aeb9..81d85f8f24 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,8 @@ +2012-12-08 Paul Eggert + + Simplify get_lim_data. + * CPP-DEFINES (ULIMIT_BREAK_VALUE): Remove. + 2012-12-03 Paul Eggert Assume POSIX 1003.1-1988 or later for signal.h (Bug#13026). diff --git a/configure.ac b/configure.ac index 9dcd55ae13..affbf5f750 100644 --- a/configure.ac +++ b/configure.ac @@ -3688,7 +3688,6 @@ case $opsys in esac -AH_TEMPLATE(ULIMIT_BREAK_VALUE, [Undocumented.]) AH_TEMPLATE(TAB3, [Undocumented.]) case $opsys in @@ -3700,14 +3699,6 @@ case $opsys in ;; gnu-linux | gnu-kfreebsd ) - dnl libc-linux/sysdeps/linux/i386/ulimit.c says that due to shared - dnl library, we cannot get the maximum address for brk. - AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ -#ifndef __i386__ -# error "not i386" -#endif - ]], [[]])], AC_DEFINE(ULIMIT_BREAK_VALUE, [(32*1024*1024)]), []) - AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ #ifndef __ia64__ # error "not ia64" @@ -3721,11 +3712,6 @@ case $opsys in AC_DEFINE(RUN_TIME_REMAP, 1, [Define if emacs.c needs to call run_time_remap; for HPUX.]) ;; - - irix6-5) - dnl Ulimit(UL_GMEMLIM) is busted... - AC_DEFINE(ULIMIT_BREAK_VALUE, [0x14000000]) - ;; esac diff --git a/src/ChangeLog b/src/ChangeLog index 2b283a609e..218dd425a2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2012-12-08 Paul Eggert + Simplify get_lim_data. + * vm-limit.c (get_lim_data): Combine RLIMIT_AS and RLIMIT_DATA methods. + Remove USG and vlimit methods; no longer used these days. + Add #error catchall just in case. + Assume POSIX 1003.1-1988 or later for signal.h (Bug#13026). Exceptions: do not assume SIGCONT, SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, SIGUSR1, SIGUSR2, as Microsoft platforms lack these. diff --git a/src/vm-limit.c b/src/vm-limit.c index 2a71e88695..befc01d400 100644 --- a/src/vm-limit.c +++ b/src/vm-limit.c @@ -44,46 +44,26 @@ static POINTER data_space_start; static size_t lim_data; -#if defined (HAVE_GETRLIMIT) && defined (RLIMIT_AS) -static void -get_lim_data (void) -{ - struct rlimit rlimit; - - getrlimit (RLIMIT_AS, &rlimit); - if (rlimit.rlim_cur == RLIM_INFINITY) - lim_data = -1; - else - lim_data = rlimit.rlim_cur; -} +#ifdef HAVE_GETRLIMIT -#else /* not HAVE_GETRLIMIT */ - -#ifdef USG +# ifndef RLIMIT_AS +# define RLIMIT_AS RLIMIT_DATA +# endif static void get_lim_data (void) { - extern long ulimit (); - - lim_data = -1; - - /* Use the ulimit call, if we seem to have it. */ -#if !defined (ULIMIT_BREAK_VALUE) || defined (GNU_LINUX) - lim_data = ulimit (3, 0); -#endif - - /* If that didn't work, just use the macro's value. */ -#ifdef ULIMIT_BREAK_VALUE - if (lim_data == -1) - lim_data = ULIMIT_BREAK_VALUE; -#endif - - lim_data -= (long) data_space_start; + /* Set LIM_DATA to the minimum of the maximum object size and the + maximum address space. Don't bother to check for values like + RLIM_INFINITY since in practice they are not much less than SIZE_MAX. */ + struct rlimit rlimit; + lim_data + = (getrlimit (RLIMIT_AS, &rlimit) == 0 && rlimit.rlim_cur <= SIZE_MAX + ? rlimit.rlim_cur + : SIZE_MAX); } -#else /* not USG */ -#ifdef WINDOWSNT +#elif defined WINDOWSNT #include "w32heap.h" @@ -94,10 +74,8 @@ get_lim_data (void) lim_data = reserved_heap_size; } -#else -#if !defined (BSD4_2) && !defined (CYGWIN) +#elif defined MSDOS -#ifdef MSDOS void get_lim_data (void) { @@ -135,32 +113,9 @@ ret_lim_data (void) get_lim_data (); return lim_data; } -#else /* not MSDOS */ -static void -get_lim_data (void) -{ - lim_data = vlimit (LIM_DATA, -1); -} -#endif /* not MSDOS */ - -#else /* BSD4_2 || CYGWIN */ - -static void -get_lim_data (void) -{ - struct rlimit XXrlimit; - - getrlimit (RLIMIT_DATA, &XXrlimit); -#ifdef RLIM_INFINITY - lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */ #else - lim_data = XXrlimit.rlim_cur; /* soft limit */ +# error "get_lim_data not implemented on this machine" #endif -} -#endif /* BSD4_2 */ -#endif /* not WINDOWSNT */ -#endif /* not USG */ -#endif /* not HAVE_GETRLIMIT */ /* Verify amount of memory available, complaining if we're near the end. */ -- 2.20.1