diff options
| author | Chong Yidong | 2008-08-02 22:35:21 +0000 |
|---|---|---|
| committer | Chong Yidong | 2008-08-02 22:35:21 +0000 |
| commit | 21da04c4e9f97dde131a69d0c4e68405a65d6f88 (patch) | |
| tree | b3c12caa1b68859a6bac8fa2f1bdebb9c2a2485b | |
| parent | a2dec0e5e3e2d6db0a38820ceb8eafb99cb35db1 (diff) | |
| download | emacs-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.c | 30 |
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. |