diff options
| author | Chong Yidong | 2008-08-02 22:37:00 +0000 |
|---|---|---|
| committer | Chong Yidong | 2008-08-02 22:37:00 +0000 |
| commit | b6a46793c539d759cc37442ab904bb162cd5796c (patch) | |
| tree | 7a870ab0e10fe599abcfd2fa9132aebb7baa33b2 /src | |
| parent | 630d42a8afbd84851d6b48c85631d8261a88817c (diff) | |
| download | emacs-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.c | 30 |
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. |