X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsheap.c;h=1d18b8bf5dfdb6b61a5a84bcb9146a0ccc3a8e49;hb=153c92fa2a3b77ce954a1e54a5dc9ec15370cfd6;hp=1c389b5c4757df69ea17dac99c6855824433271d;hpb=976b002b16336930724ae22476014583ad022e7d;p=chise%2Fxemacs-chise.git- diff --git a/src/sheap.c b/src/sheap.c index 1c389b5..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; @@ -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'"); + } +} + +