aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong2008-08-02 22:35:21 +0000
committerChong Yidong2008-08-02 22:35:21 +0000
commit21da04c4e9f97dde131a69d0c4e68405a65d6f88 (patch)
treeb3c12caa1b68859a6bac8fa2f1bdebb9c2a2485b
parenta2dec0e5e3e2d6db0a38820ceb8eafb99cb35db1 (diff)
downloademacs-21da04c4e9f97dde131a69d0c4e68405a65d6f88.tar.gz
emacs-21da04c4e9f97dde131a69d0c4e68405a65d6f88.zip
(check_memory_limits): Don't use getrlimit on cygwin. Don't use
uninitialized pointer variable when using getrlimit.
-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 ()
147#endif 147#endif
148 extern POINTER (*__morecore) (); 148 extern POINTER (*__morecore) ();
149 149
150
151 register POINTER cp; 150 register POINTER cp;
152 unsigned long five_percent; 151 unsigned long five_percent;
153 unsigned long data_size; 152 unsigned long data_size;
154 enum warnlevel new_warnlevel; 153 enum warnlevel new_warnlevel;
155 154
156#ifdef HAVE_GETRLIMIT 155 /* Cygwin has a faulty getrlimit implementation:
156 http://lists.gnu.org/archive/html/emacs-devel/2008-08/msg00125.html */
157#if defined (HAVE_GETRLIMIT) && ! defined (CYGWIN)
157 struct rlimit rlimit; 158 struct rlimit rlimit;
158 159
159 getrlimit (RLIMIT_AS, &rlimit); 160 getrlimit (RLIMIT_AS, &rlimit);
160 161 if (RLIM_INFINITY == rlimit.rlim_max
161 if (RLIM_INFINITY == rlimit.rlim_max) 162 /* This is a nonsensical case, but it happens -- rms. */
162 return; 163 || rlimit.rlim_cur > rlimit.rlim_max)
163
164 /* This is a nonsensical case, but it happens -- rms. */
165 if (rlimit.rlim_cur > rlimit.rlim_max)
166 return; 164 return;
167
168 five_percent = rlimit.rlim_max / 20; 165 five_percent = rlimit.rlim_max / 20;
169 data_size = rlimit.rlim_cur; 166 data_size = rlimit.rlim_cur;
170 167
@@ -189,14 +186,11 @@ check_memory_limits ()
189 return; 186 return;
190 187
191 /* What level of warning does current memory usage demand? */ 188 /* What level of warning does current memory usage demand? */
192 if (data_size > five_percent * 19) 189 new_warnlevel
193 new_warnlevel = warned_95; 190 = (data_size > five_percent * 19) ? warned_95
194 else if (data_size > five_percent * 17) 191 : (data_size > five_percent * 17) ? warned_85
195 new_warnlevel = warned_85; 192 : (data_size > five_percent * 15) ? warned_75
196 else if (data_size > five_percent * 15) 193 : not_warned;
197 new_warnlevel = warned_75;
198 else
199 new_warnlevel = not_warned;
200 194
201 /* If we have gone up a level, give the appropriate warning. */ 195 /* If we have gone up a level, give the appropriate warning. */
202 if (new_warnlevel > warnlevel || new_warnlevel == warned_95) 196 if (new_warnlevel > warnlevel || new_warnlevel == warned_95)
@@ -233,8 +227,10 @@ check_memory_limits ()
233 warnlevel = warned_85; 227 warnlevel = warned_85;
234 } 228 }
235 229
230#if ! defined (HAVE_GETRLIMIT) || defined (CYGWIN)
236 if (EXCEEDS_LISP_PTR (cp)) 231 if (EXCEEDS_LISP_PTR (cp))
237 (*warn_function) ("Warning: memory in use exceeds lisp pointer size"); 232 (*warn_function) ("Warning: memory in use exceeds lisp pointer size");
233#endif
238} 234}
239 235
240/* Enable memory usage warnings. 236/* Enable memory usage warnings.