Mercurial > emacs
annotate src/vm-limit.c @ 23323:0800a4f84757
(underlying_strftime):
Set the buffer to a nonzero value before calling
strftime, and check to see whether strftime has set the buffer to zero.
This lets us distinguish between an empty buffer and an error.
I'm installing this patch by hand now; it will be superseded whenever
the glibc sources are propagated back to fsf.org.
| author | Paul Eggert <eggert@twinsun.com> |
|---|---|
| date | Fri, 25 Sep 1998 21:40:23 +0000 |
| parents | ee40177f6c68 |
| children | 274b79aeb3b7 |
| rev | line source |
|---|---|
| 734 | 1 /* Functions for memory limit warnings. |
|
1398
70d0cd4c5bff
mem_limits.h is now called mem-limits.h.
Roland McGrath <roland@gnu.org>
parents:
1392
diff
changeset
|
2 Copyright (C) 1990, 1992 Free Software Foundation, Inc. |
| 734 | 3 |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 6 GNU Emacs is free software; you can redistribute it and/or modify | |
| 7 it under the terms of the GNU General Public License as published by | |
|
1398
70d0cd4c5bff
mem_limits.h is now called mem-limits.h.
Roland McGrath <roland@gnu.org>
parents:
1392
diff
changeset
|
8 the Free Software Foundation; either version 2, or (at your option) |
| 734 | 9 any later version. |
| 10 | |
| 11 GNU Emacs is distributed in the hope that it will be useful, | |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 17 along with GNU Emacs; see the file COPYING. If not, write to | |
|
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
4696
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
4696
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
| 734 | 20 |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
21 #ifdef emacs |
|
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
3935
diff
changeset
|
22 #include <config.h> |
| 734 | 23 #include "lisp.h" |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
24 #endif |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
25 |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
26 #ifndef emacs |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
27 #include <stddef.h> |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
28 typedef size_t SIZE; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
29 typedef void *POINTER; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
30 #define EXCEEDS_LISP_PTR(x) 0 |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
31 #endif |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
32 |
|
1398
70d0cd4c5bff
mem_limits.h is now called mem-limits.h.
Roland McGrath <roland@gnu.org>
parents:
1392
diff
changeset
|
33 #include "mem-limits.h" |
| 734 | 34 |
| 35 /* | |
| 36 Level number of warnings already issued. | |
| 37 0 -- no warnings issued. | |
| 38 1 -- 75% warning already issued. | |
| 39 2 -- 85% warning already issued. | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
40 3 -- 95% warning issued; keep warning frequently. |
| 734 | 41 */ |
| 42 static int warnlevel; | |
| 43 | |
| 44 /* Function to call to issue a warning; | |
| 45 0 means don't issue them. */ | |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
46 static void (*warn_function) (); |
| 734 | 47 |
| 48 /* Get more memory space, complaining if we're near the end. */ | |
| 49 | |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
50 static void |
|
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
51 check_memory_limits () |
| 734 | 52 { |
|
1417
3a1576d52874
(check_memory_limits): Declare __morecore.
Roland McGrath <roland@gnu.org>
parents:
1416
diff
changeset
|
53 extern POINTER (*__morecore) (); |
|
3a1576d52874
(check_memory_limits): Declare __morecore.
Roland McGrath <roland@gnu.org>
parents:
1416
diff
changeset
|
54 |
| 734 | 55 register POINTER cp; |
|
3935
cecc2b59e875
(check_memory_limits): Use unsigned long to hold memory size values.
Richard M. Stallman <rms@gnu.org>
parents:
1417
diff
changeset
|
56 unsigned long five_percent; |
|
cecc2b59e875
(check_memory_limits): Use unsigned long to hold memory size values.
Richard M. Stallman <rms@gnu.org>
parents:
1417
diff
changeset
|
57 unsigned long data_size; |
| 734 | 58 |
| 59 if (lim_data == 0) | |
| 60 get_lim_data (); | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
61 five_percent = lim_data / 20; |
| 734 | 62 |
| 63 /* Find current end of memory and issue warning if getting near max */ | |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
64 cp = (char *) (*__morecore) (0); |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
65 data_size = (char *) cp - (char *) data_space_start; |
| 734 | 66 |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
67 if (warn_function) |
| 734 | 68 switch (warnlevel) |
| 69 { | |
| 70 case 0: | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
71 if (data_size > five_percent * 15) |
| 734 | 72 { |
| 73 warnlevel++; | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
74 (*warn_function) ("Warning: past 75% of memory limit"); |
| 734 | 75 } |
| 76 break; | |
| 77 | |
| 78 case 1: | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
79 if (data_size > five_percent * 17) |
| 734 | 80 { |
| 81 warnlevel++; | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
82 (*warn_function) ("Warning: past 85% of memory limit"); |
| 734 | 83 } |
| 84 break; | |
| 85 | |
| 86 case 2: | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
87 if (data_size > five_percent * 19) |
| 734 | 88 { |
| 89 warnlevel++; | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
90 (*warn_function) ("Warning: past 95% of memory limit"); |
| 734 | 91 } |
| 92 break; | |
| 93 | |
| 94 default: | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
95 (*warn_function) ("Warning: past acceptable memory limits"); |
| 734 | 96 break; |
| 97 } | |
| 98 | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
99 /* If we go down below 70% full, issue another 75% warning |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
100 when we go up again. */ |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
101 if (data_size < five_percent * 14) |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
102 warnlevel = 0; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
103 /* If we go down below 80% full, issue another 85% warning |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
104 when we go up again. */ |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
105 else if (warnlevel > 1 && data_size < five_percent * 16) |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
106 warnlevel = 1; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
107 /* If we go down below 90% full, issue another 95% warning |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
108 when we go up again. */ |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
109 else if (warnlevel > 2 && data_size < five_percent * 18) |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
110 warnlevel = 2; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
111 |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
112 if (EXCEEDS_LISP_PTR (cp)) |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
113 (*warn_function) ("Warning: memory in use exceeds lisp pointer size"); |
| 734 | 114 } |
| 115 | |
| 116 /* Cause reinitialization based on job parameters; | |
| 117 also declare where the end of pure storage is. */ | |
| 118 | |
| 119 void | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
120 memory_warnings (start, warnfun) |
| 734 | 121 POINTER start; |
| 122 void (*warnfun) (); | |
| 123 { | |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
124 extern void (* __after_morecore_hook) (); /* From gmalloc.c */ |
| 734 | 125 |
| 126 if (start) | |
| 127 data_space_start = start; | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
128 else |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
129 data_space_start = start_of_data (); |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
130 |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
131 warn_function = warnfun; |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
132 __after_morecore_hook = check_memory_limits; |
| 734 | 133 } |
