summaryrefslogtreecommitdiff
path: root/src/vm-limit.c
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2008-08-02 22:35:21 +0000
committerChong Yidong <cyd@stupidchicken.com>2008-08-02 22:35:21 +0000
commit21da04c4e9f97dde131a69d0c4e68405a65d6f88 (patch)
treeb3c12caa1b68859a6bac8fa2f1bdebb9c2a2485b /src/vm-limit.c
parenta2dec0e5e3e2d6db0a38820ceb8eafb99cb35db1 (diff)
downloademacs-21da04c4e9f97dde131a69d0c4e68405a65d6f88.tar.gz
(check_memory_limits): Don't use getrlimit on cygwin. Don't use
uninitialized pointer variable when using getrlimit.
Diffstat (limited to 'src/vm-limit.c')
-rw-r--r--src/vm-limit.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/vm-limit.c b/src/vm-limit.c
index 35bbdb8d079..7628d29b607 100644
--- a/src/vm-limit.c
+++ b/src/vm-limit.c
@@ -147,24 +147,21 @@ check_memory_limits ()
#endif
extern POINTER (*__morecore) ();
-
register POINTER cp;
unsigned long five_percent;
unsigned long data_size;
enum warnlevel new_warnlevel;
-#ifdef HAVE_GETRLIMIT
+ /* Cygwin has a faulty getrlimit implementation:
+ http://lists.gnu.org/archive/html/emacs-devel/2008-08/msg00125.html */
+#if defined (HAVE_GETRLIMIT) && ! defined (CYGWIN)
struct rlimit rlimit;
getrlimit (RLIMIT_AS, &rlimit);
-
- if (RLIM_INFINITY == rlimit.rlim_max)
- return;
-
- /* This is a nonsensical case, but it happens -- rms. */
- if (rlimit.rlim_cur > rlimit.rlim_max)
+ if (RLIM_INFINITY == rlimit.rlim_max
+ /* This is a nonsensical case, but it happens -- rms. */
+ || rlimit.rlim_cur > rlimit.rlim_max)
return;
-
five_percent = rlimit.rlim_max / 20;
data_size = rlimit.rlim_cur;
@@ -189,14 +186,11 @@ check_memory_limits ()
return;
/* What level of warning does current memory usage demand? */
- if (data_size > five_percent * 19)
- new_warnlevel = warned_95;
- else if (data_size > five_percent * 17)
- new_warnlevel = warned_85;
- else if (data_size > five_percent * 15)
- new_warnlevel = warned_75;
- else
- new_warnlevel = not_warned;
+ new_warnlevel
+ = (data_size > five_percent * 19) ? warned_95
+ : (data_size > five_percent * 17) ? warned_85
+ : (data_size > five_percent * 15) ? warned_75
+ : not_warned;
/* If we have gone up a level, give the appropriate warning. */
if (new_warnlevel > warnlevel || new_warnlevel == warned_95)
@@ -233,8 +227,10 @@ check_memory_limits ()
warnlevel = warned_85;
}
+#if ! defined (HAVE_GETRLIMIT) || defined (CYGWIN)
if (EXCEEDS_LISP_PTR (cp))
(*warn_function) ("Warning: memory in use exceeds lisp pointer size");
+#endif
}
/* Enable memory usage warnings.