Mercurial > hg > xemacs-beta
annotate src/vm-limit.c @ 5518:3cc7470ea71c
gnuclient: if TMPDIR was set and connect failed, try again with /tmp
2011-06-03 Aidan Kehoe <kehoea@parhasard.net>
* gnuslib.c (connect_to_unix_server):
Retry with /tmp as a directory in which to search for Unix sockets
if an attempt to connect with some other directory failed (which
may be because gnuclient and gnuserv don't share an environment
value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR
turned off).
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Fri, 03 Jun 2011 18:40:57 +0100 |
parents | 308d34e9f07d |
children |
rev | line source |
---|---|
428 | 1 /* Functions for memory limit warnings. |
2 Copyright (C) 1990, 1992 Free Software Foundation, Inc. | |
3 | |
4 This file is part of XEmacs. | |
5 | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
6 XEmacs is free software: you can redistribute it and/or modify it |
428 | 7 under the terms of the GNU General Public License as published by the |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
8 Free Software Foundation, either version 3 of the License, or (at your |
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
9 option) any later version. |
428 | 10 |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
428 | 18 |
19 /* Synched up with: FSF 19.30. */ | |
20 | |
21 #ifdef emacs | |
22 #include <config.h> | |
23 #include "lisp.h" | |
24 #endif | |
25 | |
26 #include <stddef.h> | |
27 #ifndef emacs | |
28 typedef size_t SIZE; | |
29 typedef void *POINTER; | |
30 #define EXCEEDS_LISP_PTR(x) 0 | |
31 #endif | |
32 | |
33 #include "mem-limits.h" | |
34 | |
793 | 35 #ifndef _NO_MALLOC_WARNING_ |
36 | |
428 | 37 /* |
38 Level number of warnings already issued. | |
39 0 -- no warnings issued. | |
40 1 -- 75% warning already issued. | |
41 2 -- 85% warning already issued. | |
42 3 -- 95% warning issued; keep warning frequently. | |
43 */ | |
44 static int warnlevel; | |
45 | |
46 /* Function to call to issue a warning; | |
47 0 means don't issue them. */ | |
442 | 48 static void (*warn_function) (const char *); |
428 | 49 |
50 /* Get more memory space, complaining if we're near the end. */ | |
51 | |
52 static void | |
53 check_memory_limits (void) | |
54 { | |
55 extern POINTER (*__morecore) (ptrdiff_t size); | |
56 | |
57 POINTER cp; | |
58 unsigned long five_percent; | |
59 unsigned long data_size; | |
442 | 60 void (*save_warn_fun) (const char *); |
428 | 61 |
62 if (lim_data == 0) | |
63 get_lim_data (); | |
64 five_percent = lim_data / 20; | |
65 | |
66 /* Find current end of memory and issue warning if getting near max */ | |
67 cp = (char *) (*__morecore) (0); | |
68 data_size = (char *) cp - (char *) data_space_start; | |
69 | |
70 if (warn_function) | |
442 | 71 { |
72 /* temporarily reset the warn_function to 0 or we will get infinite | |
73 looping. */ | |
74 save_warn_fun = warn_function; | |
75 warn_function = 0; | |
76 switch (warnlevel) | |
77 { | |
78 case 0: | |
79 if (data_size > five_percent * 15) | |
80 { | |
81 warnlevel++; | |
82 (*save_warn_fun) ("Warning: past 75% of memory limit"); | |
83 } | |
84 break; | |
428 | 85 |
442 | 86 case 1: |
87 if (data_size > five_percent * 17) | |
88 { | |
89 warnlevel++; | |
90 (*save_warn_fun) ("Warning: past 85% of memory limit"); | |
91 } | |
92 break; | |
428 | 93 |
442 | 94 case 2: |
95 if (data_size > five_percent * 19) | |
96 { | |
97 warnlevel++; | |
98 (*save_warn_fun) ("Warning: past 95% of memory limit"); | |
99 } | |
100 break; | |
428 | 101 |
442 | 102 default: |
103 (*save_warn_fun) ("Warning: past acceptable memory limits"); | |
104 break; | |
105 } | |
106 warn_function = save_warn_fun; | |
107 } | |
428 | 108 |
109 /* If we go down below 70% full, issue another 75% warning | |
110 when we go up again. */ | |
111 if (data_size < five_percent * 14) | |
112 warnlevel = 0; | |
113 /* If we go down below 80% full, issue another 85% warning | |
114 when we go up again. */ | |
115 else if (warnlevel > 1 && data_size < five_percent * 16) | |
116 warnlevel = 1; | |
117 /* If we go down below 90% full, issue another 95% warning | |
118 when we go up again. */ | |
119 else if (warnlevel > 2 && data_size < five_percent * 18) | |
120 warnlevel = 2; | |
121 | |
122 if (EXCEEDS_LISP_PTR (cp)) | |
442 | 123 { |
124 if (warn_function) | |
125 { | |
126 /* temporarily reset the warn_function to 0 or we will get infinite | |
127 looping. */ | |
128 save_warn_fun = warn_function; | |
129 warn_function = 0; | |
130 (*save_warn_fun) | |
131 ("Warning: memory in use exceeds lisp pointer size"); | |
132 warn_function = save_warn_fun; | |
133 } | |
134 } | |
428 | 135 } |
136 | |
793 | 137 #endif /* not _NO_MALLOC_WARNING_ */ |
138 | |
428 | 139 /* Cause reinitialization based on job parameters; |
140 also declare where the end of pure storage is. */ | |
141 | |
142 void | |
2286 | 143 memory_warnings (void *start, |
144 #ifdef _NO_MALLOC_WARNING_ | |
145 void (*UNUSED_ARG (warnfun)) (const char *) ATTRIBUTE_UNUSED | |
146 #else | |
147 void (*warnfun) (const char *) | |
148 #endif | |
149 ) | |
428 | 150 { |
793 | 151 #ifndef _NO_MALLOC_WARNING_ |
428 | 152 extern void (* __after_morecore_hook) (void); /* From gmalloc.c */ |
793 | 153 #endif |
428 | 154 |
155 if (start) | |
442 | 156 data_space_start = (char*) start; |
428 | 157 else |
158 data_space_start = start_of_data (); | |
159 | |
160 #ifndef _NO_MALLOC_WARNING_ | |
161 warn_function = warnfun; | |
162 __after_morecore_hook = check_memory_limits; | |
163 #endif | |
164 } |