annotate src/vm-limit.c @ 2915:2c9dde3bd3a0

Initial revision
author Jim Blandy <jimb@redhat.com>
date Thu, 20 May 1993 02:04:15 +0000
parents 3a1576d52874
children cecc2b59e875
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
3
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
5
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9 any later version.
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
20 #ifdef emacs
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21 #include "config.h"
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
22 #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
23 #endif
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
24
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
25 #ifndef emacs
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
26 #include <stddef.h>
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
27 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
28 typedef void *POINTER;
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
29 #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
30 #endif
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
31
1398
70d0cd4c5bff mem_limits.h is now called mem-limits.h.
Roland McGrath <roland@gnu.org>
parents: 1392
diff changeset
32 #include "mem-limits.h"
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
33
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34 /*
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35 Level number of warnings already issued.
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 0 -- no warnings issued.
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 1 -- 75% warning already issued.
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
38 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
39 3 -- 95% warning issued; keep warning frequently.
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40 */
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
41 static int warnlevel;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
42
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43 /* Function to call to issue a warning;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 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
45 static void (*warn_function) ();
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
46
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
47 /* Get more memory space, complaining if we're near the end. */
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48
1416
60bb5e719468 (morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents: 1400
diff changeset
49 static void
60bb5e719468 (morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents: 1400
diff changeset
50 check_memory_limits ()
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
51 {
1417
3a1576d52874 (check_memory_limits): Declare __morecore.
Roland McGrath <roland@gnu.org>
parents: 1416
diff changeset
52 extern POINTER (*__morecore) ();
3a1576d52874 (check_memory_limits): Declare __morecore.
Roland McGrath <roland@gnu.org>
parents: 1416
diff changeset
53
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 register POINTER cp;
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
55 int five_percent;
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
56 int data_size;
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
57
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58 if (lim_data == 0)
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59 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
60 five_percent = lim_data / 20;
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
61
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 /* 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
63 cp = (char *) (*__morecore) (0);
1400
af08281c0cbe (warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents: 1398
diff changeset
64 data_size = (char *) cp - (char *) data_space_start;
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65
1400
af08281c0cbe (warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents: 1398
diff changeset
66 if (warn_function)
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67 switch (warnlevel)
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 {
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69 case 0:
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
70 if (data_size > five_percent * 15)
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71 {
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 warnlevel++;
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
73 (*warn_function) ("Warning: past 75% of memory limit");
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74 }
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75 break;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
76
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
77 case 1:
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
78 if (data_size > five_percent * 17)
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
79 {
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80 warnlevel++;
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
81 (*warn_function) ("Warning: past 85% of memory limit");
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
82 }
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83 break;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
84
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
85 case 2:
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
86 if (data_size > five_percent * 19)
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87 {
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
88 warnlevel++;
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
89 (*warn_function) ("Warning: past 95% of memory limit");
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90 }
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
91 break;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
92
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
93 default:
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
94 (*warn_function) ("Warning: past acceptable memory limits");
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
95 break;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96 }
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
97
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
98 /* 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
99 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
100 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
101 warnlevel = 0;
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
102 /* 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
103 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
104 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
105 warnlevel = 1;
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
106 /* 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
107 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
108 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
109 warnlevel = 2;
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
110
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
111 if (EXCEEDS_LISP_PTR (cp))
1400
af08281c0cbe (warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents: 1398
diff changeset
112 (*warn_function) ("Warning: memory in use exceeds lisp pointer size");
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
113 }
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 /* Cause reinitialization based on job parameters;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116 also declare where the end of pure storage is. */
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
118 void
1392
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
119 memory_warnings (start, warnfun)
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
120 POINTER start;
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
121 void (*warnfun) ();
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
122 {
1416
60bb5e719468 (morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents: 1400
diff changeset
123 extern void (* __after_morecore_hook) (); /* From gmalloc.c */
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
125 if (start)
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 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
127 else
ad64a94cd81c (morecore_with_warning): Reduce warnlevel when usage drops far enough.
Richard M. Stallman <rms@gnu.org>
parents: 734
diff changeset
128 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
129
1400
af08281c0cbe (warnfunction): Renamed to warn_function (was used inconsistently).
Roland McGrath <roland@gnu.org>
parents: 1398
diff changeset
130 warn_function = warnfun;
1416
60bb5e719468 (morecore_with_warning): Removed.
Roland McGrath <roland@gnu.org>
parents: 1400
diff changeset
131 __after_morecore_hook = check_memory_limits;
734
64e152d639af entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132 }