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