Mercurial > hg > xemacs-beta
annotate src/sheap.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 /* Static Heap management routines for XEmacs. |
2 Copyright (C) 1994, 1998 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:
4952
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:
4952
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:
4952
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:
4952
diff
changeset
|
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
428 | 18 |
19 #include <config.h> | |
20 #include "lisp.h" | |
442 | 21 |
771 | 22 #include "sysfile.h" |
23 | |
428 | 24 #include <unistd.h> |
25 #include <sheap-adjust.h> | |
26 | |
27 #define STATIC_HEAP_BASE 0x800000 | |
4840
17b3dc5500b0
changes to get old non-pdump dumping on Cygwin to work (sort of)
Ben Wing <ben@xemacs.org>
parents:
1315
diff
changeset
|
28 #define STATIC_HEAP_SLOP 0x80000 |
428 | 29 #define STATIC_HEAP_SIZE \ |
30 (STATIC_HEAP_BASE + SHEAP_ADJUSTMENT + STATIC_HEAP_SLOP) | |
31 #define BLOCKSIZE (1<<12) | |
32 #define ALLOC_UNIT (BLOCKSIZE-1) | |
33 #define ALLOC_MASK ~((unsigned long)(ALLOC_UNIT)) | |
34 #define ALIGN_ALLOC(addr) ((((unsigned long)addr) + ALLOC_UNIT) & ALLOC_MASK) | |
35 | |
36 char static_heap_buffer[STATIC_HEAP_SIZE]={0}; | |
37 char* static_heap_base=static_heap_buffer; | |
38 char* static_heap_ptr=static_heap_buffer; | |
39 unsigned long static_heap_size=STATIC_HEAP_SIZE; | |
40 int static_heap_initialized=0; | |
41 int static_heap_dumped=0; | |
42 | |
853 | 43 void *more_static_core ( ptrdiff_t increment ); |
44 void *more_static_core ( ptrdiff_t increment ) | |
428 | 45 { |
46 int size = (int) increment; | |
47 void *result; | |
48 | |
49 if (!static_heap_initialized) | |
50 { | |
51 #ifdef VALMASK | |
52 if (((unsigned long) static_heap_base & ~VALMASK) != 0) | |
53 { | |
54 printf ("error: The heap was allocated in upper memory.\n"); | |
55 exit (-1); | |
56 } | |
57 #endif | |
58 static_heap_base=(char*)ALIGN_ALLOC(static_heap_buffer); | |
59 static_heap_ptr=static_heap_base; | |
60 static_heap_size=STATIC_HEAP_SIZE - | |
61 (static_heap_base-static_heap_buffer); | |
442 | 62 #ifdef CYGWIN |
428 | 63 sbrk(BLOCKSIZE); /* force space for fork to work */ |
64 #endif | |
65 static_heap_initialized=1; | |
66 } | |
67 | |
68 result = static_heap_ptr; | |
69 | |
70 /* we don't need to align - handled by gmalloc. */ | |
71 | |
72 if (size < 0) | |
73 { | |
74 if (static_heap_ptr + size < static_heap_base) | |
75 { | |
76 return 0; | |
77 } | |
78 } | |
79 else | |
80 { | |
81 if (static_heap_ptr + size >= static_heap_base + static_heap_size) | |
82 { | |
1111 | 83 printf ( |
84 "\nRequested %d bytes, static heap exhausted! base is %p, current ptr\n" | |
4840
17b3dc5500b0
changes to get old non-pdump dumping on Cygwin to work (sort of)
Ben Wing <ben@xemacs.org>
parents:
1315
diff
changeset
|
85 "is %p, static heap size is %ld. You have exhausted the static heap. \n" |
1111 | 86 "\n" |
87 "If you are simply trying to compile, remove sheap-adjust.h\n" | |
88 "and recompile from the top level. If this doesn't\n" | |
89 "work then STATIC_HEAP_SLOP (defined in this file) is too small.\n" | |
90 "\n" | |
91 "If you want to run temacs, change SHEAP_ADJUSTMENT in sheap-adjust.h\n" | |
92 "to 0 or a +ve number. Generally you should *not* try to run temacs\n" | |
93 "with a static heap, you should dump first.\n", | |
4840
17b3dc5500b0
changes to get old non-pdump dumping on Cygwin to work (sort of)
Ben Wing <ben@xemacs.org>
parents:
1315
diff
changeset
|
94 size, static_heap_base, static_heap_ptr, static_heap_size); |
428 | 95 |
96 exit(-1); | |
97 return 0; | |
98 } | |
99 } | |
100 static_heap_ptr += size; | |
101 | |
102 return result; | |
103 } | |
104 | |
105 static void | |
903 | 106 sheap_adjust_h (long adjust) |
428 | 107 { |
771 | 108 FILE *stream = retry_fopen ("sheap-adjust.h", "w"); |
428 | 109 |
110 if (stream == NULL) | |
111 report_file_error ("Opening sheap adjustment file", | |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4840
diff
changeset
|
112 build_ascstring ("sheap-adjust.h")); |
428 | 113 |
114 fprintf (stream, | |
115 "/*\tDo not edit this file!\n" | |
116 "\tAutomatically generated by XEmacs */\n" | |
903 | 117 "# define SHEAP_ADJUSTMENT (%ld)\n", adjust); |
771 | 118 retry_fclose (stream); |
428 | 119 } |
120 | |
442 | 121 void report_sheap_usage (int die_if_pure_storage_exceeded); |
428 | 122 void |
123 report_sheap_usage (int die_if_pure_storage_exceeded) | |
124 { | |
125 int rc = 0; | |
126 | |
903 | 127 Bytecount lost = STATIC_HEAP_SIZE |
428 | 128 - (static_heap_ptr - static_heap_buffer); |
129 char buf[200]; | |
1157 | 130 sprintf (buf, "Static heap usage: %ldk of %ldk, slop is %ldk", |
131 (long) ((static_heap_ptr - static_heap_buffer) /1024), | |
132 (long) (STATIC_HEAP_SIZE / 1024), | |
133 (long) STATIC_HEAP_SLOP / 1024); | |
428 | 134 |
1315 | 135 if (lost > STATIC_HEAP_SLOP) |
136 { | |
137 sprintf (buf + strlen (buf), " -- %ldk wasted", (long)(lost/1024)); | |
138 if (die_if_pure_storage_exceeded) | |
139 { | |
140 sheap_adjust_h(STATIC_HEAP_SLOP - lost); | |
141 sprintf (buf + strlen (buf), " -- reset to %ldk", | |
142 (long) ((STATIC_HEAP_SIZE + STATIC_HEAP_SLOP - lost) / | |
143 1024)); | |
144 rc = -1; | |
145 } | |
146 message ("%s\n", buf); | |
428 | 147 } |
148 | |
1315 | 149 if (rc < 0) |
150 { | |
151 unlink ("SATISFIED"); | |
152 stderr_out ("Static heap size adjusted, don't panic! I will restart the `make'\n"); | |
153 exit (0); | |
154 } | |
428 | 155 } |
156 | |
157 |