X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsheap.c;h=1d18b8bf5dfdb6b61a5a84bcb9146a0ccc3a8e49;hb=abf386d83354a83eaffe586602a5b5e34a9c6503;hp=49d7a32af72361f075132e18bfdaa11fd031b67f;hpb=6883ee56ec887c2c48abe5b06b5e66aa74031910;p=chise%2Fxemacs-chise.git- diff --git a/src/sheap.c b/src/sheap.c index 49d7a32..1d18b8b 100644 --- a/src/sheap.c +++ b/src/sheap.c @@ -19,13 +19,12 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/ #include -#include #include "lisp.h" -#include + #include #include -#define STATIC_HEAP_BASE 0x600000 +#define STATIC_HEAP_BASE 0x800000 #define STATIC_HEAP_SLOP 0x40000 #define STATIC_HEAP_SIZE \ (STATIC_HEAP_BASE + SHEAP_ADJUSTMENT + STATIC_HEAP_SLOP) @@ -41,6 +40,7 @@ unsigned long static_heap_size=STATIC_HEAP_SIZE; int static_heap_initialized=0; int static_heap_dumped=0; +void* more_static_core ( ptrdiff_t increment ); void* more_static_core ( ptrdiff_t increment ) { int size = (int) increment; @@ -59,7 +59,7 @@ void* more_static_core ( ptrdiff_t increment ) static_heap_ptr=static_heap_base; static_heap_size=STATIC_HEAP_SIZE - (static_heap_base-static_heap_buffer); -#ifdef __CYGWIN32__ +#ifdef CYGWIN sbrk(BLOCKSIZE); /* force space for fork to work */ #endif static_heap_initialized=1; @@ -85,8 +85,8 @@ void* more_static_core ( ptrdiff_t increment ) "\nRequested %d bytes, static heap exhausted! base is %p, current ptr is %p. You have exhausted the static heap. -If you are simply trying to compile, remove sheap-adjust.h and -puresize-adjust.h and recompile from the top level. If this doesn't +If you are simply trying to compile, remove sheap-adjust.h +and recompile from the top level. If this doesn't work then STATIC_HEAP_SLOP (defined in this file) is too small. If you want to run temacs, change SHEAP_ADJUSTMENT in sheap-adjust.h @@ -103,7 +103,7 @@ static_heap_base, static_heap_ptr); return result; } -void +static void sheap_adjust_h () { FILE *stream = fopen ("sheap-adjust.h", "w"); @@ -120,3 +120,32 @@ sheap_adjust_h () fclose (stream); } +void report_sheap_usage (int die_if_pure_storage_exceeded); +void +report_sheap_usage (int die_if_pure_storage_exceeded) +{ + int rc = 0; + + size_t lost = (STATIC_HEAP_BASE + STATIC_HEAP_SLOP + SHEAP_ADJUSTMENT) + - (static_heap_ptr - static_heap_buffer); + char buf[200]; + sprintf (buf, "Static heap usage: %ld of %ld", + (long) (static_heap_ptr - static_heap_buffer), + (long) (STATIC_HEAP_BASE + STATIC_HEAP_SLOP + SHEAP_ADJUSTMENT)); + + if (lost > STATIC_HEAP_SLOP) { + sprintf (buf + strlen (buf), " -- %ldk wasted", (long)(lost/1024)); + if (die_if_pure_storage_exceeded) { + sheap_adjust_h(); + rc = -1; + } + message ("%s", buf); + } + + if (rc < 0) { + unlink("SATISFIED"); + fatal ("Static heap size adjusted, Don't Panic! I will restart the `make'"); + } +} + +