Mercurial > emacs
annotate src/vm-limit.c @ 67143:cbf6461ecbbd
(cua--highlight-rectangle): Preserve
existing face when partially highlighting a TAB in a rectangle.
| author | Kim F. Storm <storm@cua.dk> |
|---|---|
| date | Sat, 26 Nov 2005 23:30:43 +0000 |
| parents | a0d1312ede66 |
| children | 3bd95f4f2941 2d92f5c9d6ae |
| rev | line source |
|---|---|
| 734 | 1 /* Functions for memory limit warnings. |
|
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
2 Copyright (C) 1990, 1992, 2002, 2003, 2004, |
|
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
3 2005 Free Software Foundation, Inc. |
| 734 | 4 |
| 5 This file is part of GNU Emacs. | |
| 6 | |
| 7 GNU Emacs is free software; you can redistribute it and/or modify | |
| 8 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
|
9 the Free Software Foundation; either version 2, or (at your option) |
| 734 | 10 any later version. |
| 11 | |
| 12 GNU Emacs is distributed in the hope that it will be useful, | |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 GNU General Public License for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
| 18 along with GNU Emacs; see the file COPYING. If not, write to | |
| 64084 | 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 20 Boston, MA 02110-1301, USA. */ | |
| 734 | 21 |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
22 #ifdef emacs |
|
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
3935
diff
changeset
|
23 #include <config.h> |
| 734 | 24 #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
|
25 #endif |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
26 |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
27 #ifndef emacs |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
28 #include <stddef.h> |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
29 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
|
30 typedef void *POINTER; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
31 #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
|
32 #endif |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
33 |
|
1398
70d0cd4c5bff
mem_limits.h is now called mem-limits.h.
Roland McGrath <roland@gnu.org>
parents:
1392
diff
changeset
|
34 #include "mem-limits.h" |
| 734 | 35 |
| 36 /* | |
| 37 Level number of warnings already issued. | |
| 38 0 -- no warnings issued. | |
| 39 1 -- 75% warning already issued. | |
| 40 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
|
41 3 -- 95% warning issued; keep warning frequently. |
| 734 | 42 */ |
| 43 static int warnlevel; | |
| 44 | |
| 45 /* Function to call to issue a warning; | |
| 46 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
|
47 static void (*warn_function) (); |
| 734 | 48 |
| 49 /* Get more memory space, complaining if we're near the end. */ | |
| 50 | |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
51 static void |
|
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
52 check_memory_limits () |
| 734 | 53 { |
|
30062
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
54 #ifdef REL_ALLOC |
|
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
55 extern POINTER (*real_morecore) (); |
|
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
56 #endif |
|
1417
3a1576d52874
(check_memory_limits): Declare __morecore.
Roland McGrath <roland@gnu.org>
parents:
1416
diff
changeset
|
57 extern POINTER (*__morecore) (); |
|
3a1576d52874
(check_memory_limits): Declare __morecore.
Roland McGrath <roland@gnu.org>
parents:
1416
diff
changeset
|
58 |
|
30062
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
59 |
| 734 | 60 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
|
61 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
|
62 unsigned long data_size; |
| 734 | 63 |
| 64 if (lim_data == 0) | |
| 65 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
|
66 five_percent = lim_data / 20; |
| 734 | 67 |
| 68 /* Find current end of memory and issue warning if getting near max */ | |
|
30062
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
69 #ifdef REL_ALLOC |
|
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
70 if (real_morecore) |
|
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
71 cp = (char *) (*real_morecore) (0); |
|
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
72 else |
|
9a026d470bc9
(check_memory_limits) [REL_ALLOC]: Use real_morecore
Andrew Innes <andrewi@gnu.org>
parents:
24366
diff
changeset
|
73 #endif |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
74 cp = (char *) (*__morecore) (0); |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
75 data_size = (char *) cp - (char *) data_space_start; |
| 734 | 76 |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
77 if (warn_function) |
| 734 | 78 switch (warnlevel) |
| 79 { | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
30062
diff
changeset
|
80 case 0: |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
81 if (data_size > five_percent * 15) |
| 734 | 82 { |
| 83 warnlevel++; | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
84 (*warn_function) ("Warning: past 75% of memory limit"); |
| 734 | 85 } |
| 86 break; | |
| 87 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
30062
diff
changeset
|
88 case 1: |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
89 if (data_size > five_percent * 17) |
| 734 | 90 { |
| 91 warnlevel++; | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
92 (*warn_function) ("Warning: past 85% of memory limit"); |
| 734 | 93 } |
| 94 break; | |
| 95 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
30062
diff
changeset
|
96 case 2: |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
97 if (data_size > five_percent * 19) |
| 734 | 98 { |
| 99 warnlevel++; | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
100 (*warn_function) ("Warning: past 95% of memory limit"); |
| 734 | 101 } |
| 102 break; | |
| 103 | |
| 104 default: | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
105 (*warn_function) ("Warning: past acceptable memory limits"); |
| 734 | 106 break; |
| 107 } | |
| 108 | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
109 /* 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
|
110 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
|
111 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
|
112 warnlevel = 0; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
113 /* 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
|
114 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
|
115 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
|
116 warnlevel = 1; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
117 /* 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
|
118 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
|
119 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
|
120 warnlevel = 2; |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
121 |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
122 if (EXCEEDS_LISP_PTR (cp)) |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
123 (*warn_function) ("Warning: memory in use exceeds lisp pointer size"); |
| 734 | 124 } |
| 125 | |
| 126 /* Cause reinitialization based on job parameters; | |
| 127 also declare where the end of pure storage is. */ | |
| 128 | |
| 129 void | |
|
1392
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
130 memory_warnings (start, warnfun) |
| 734 | 131 POINTER start; |
| 132 void (*warnfun) (); | |
| 133 { | |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
134 extern void (* __after_morecore_hook) (); /* From gmalloc.c */ |
| 734 | 135 |
| 136 if (start) | |
| 137 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
|
138 else |
|
ad64a94cd81c
(morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents:
734
diff
changeset
|
139 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
|
140 |
|
1400
af08281c0cbe
(warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents:
1398
diff
changeset
|
141 warn_function = warnfun; |
|
1416
60bb5e719468
(morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents:
1400
diff
changeset
|
142 __after_morecore_hook = check_memory_limits; |
|
24366
274b79aeb3b7
(memory_warnings) [WINDOWSNT]: Reset lim_data on each
Andrew Innes <andrewi@gnu.org>
parents:
14186
diff
changeset
|
143 |
|
274b79aeb3b7
(memory_warnings) [WINDOWSNT]: Reset lim_data on each
Andrew Innes <andrewi@gnu.org>
parents:
14186
diff
changeset
|
144 #ifdef WINDOWSNT |
|
274b79aeb3b7
(memory_warnings) [WINDOWSNT]: Reset lim_data on each
Andrew Innes <andrewi@gnu.org>
parents:
14186
diff
changeset
|
145 /* Force data limit to be recalculated on each run. */ |
|
274b79aeb3b7
(memory_warnings) [WINDOWSNT]: Reset lim_data on each
Andrew Innes <andrewi@gnu.org>
parents:
14186
diff
changeset
|
146 lim_data = 0; |
|
274b79aeb3b7
(memory_warnings) [WINDOWSNT]: Reset lim_data on each
Andrew Innes <andrewi@gnu.org>
parents:
14186
diff
changeset
|
147 #endif |
| 734 | 148 } |
| 52401 | 149 |
| 150 /* arch-tag: eab04eda-1f69-447a-8d9f-95f0a3983ca5 | |
| 151 (do not change this comment) */ |
