Mercurial > emacs
changeset 20412:31468445f518
(main): Fix the stack-limit code to calculate
the ratio for re_max_failures accurately and leave some extra slack.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Thu, 04 Dec 1997 05:53:41 +0000 |
parents | 089ca3e66e6d |
children | 7d1e9fc47f9d |
files | src/emacs.c |
diffstat | 1 files changed, 10 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/emacs.c Thu Dec 04 05:49:21 1997 +0000 +++ b/src/emacs.c Thu Dec 04 05:53:41 1997 +0000 @@ -595,8 +595,14 @@ { long newlim; extern int re_max_failures; - /* Approximate the amount regex.c needs, plus some more. */ - newlim = re_max_failures * 2 * 20 * sizeof (char *); + /* Approximate the amount regex.c needs per unit of re_max_failures. */ + int ratio = 20 * sizeof (char *); + /* Then add 33% to cover the size of the smaller stacks that regex.c + successively allocates and discards, on its way to the maximum. */ + ratio += ratio / 3; + /* Add in some extra to cover + what we're likely to use for other reasons. */ + newlim = re_max_failures * ratio + 200000; #ifdef __NetBSD__ /* NetBSD (at least NetBSD 1.2G and former) has a bug in its stack allocation routine for new process that the allocation @@ -607,8 +613,8 @@ if (newlim > rlim.rlim_max) { newlim = rlim.rlim_max; - /* Don't let regex.c overflow the stack. */ - re_max_failures = newlim / (2 * 20 * sizeof (char *)); + /* Don't let regex.c overflow the stack we have. */ + re_max_failures = (newlim - 200000) / ratio; } if (rlim.rlim_cur < newlim) rlim.rlim_cur = newlim;