From a5c314c80ec44425bedc2137c539dea0c005672c Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Wed, 16 Jun 1999 10:18:27 +0000 Subject: [PATCH] * gc.c (scm_mallocated): Just make this signed. (scm_igc): Check for underflow by seeing if this is negative. Much cleaner. * gc.h (scm_mallocated): Fix declaration. (Thanks to Greg Harvey.) --- libguile/gc.c | 20 ++++++++------------ libguile/gc.h | 4 ++-- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/libguile/gc.c b/libguile/gc.c index 7590782c7..4e5ec8112 100644 --- a/libguile/gc.c +++ b/libguile/gc.c @@ -175,7 +175,7 @@ SCM scm_weak_vectors; /* GC Statistics Keeping */ unsigned long scm_cells_allocated = 0; -unsigned long scm_mallocated = 0; +long scm_mallocated = 0; unsigned long scm_gc_cells_collected; unsigned long scm_gc_malloc_collected; unsigned long scm_gc_ports_collected; @@ -454,17 +454,13 @@ scm_igc (what) return; } - if (scm_mallocated > ((unsigned long) 0 - (1 << 24))) - { - /* It is extremely unlikely that you have allocated all but 16 Mb - (one sixteenth of 2^32) of your address space. It is much more - likely that you have forgotten to report the sizes of objects - you have allocated via scm_done_malloc, or some such. When the - GC freed them, it subtracted their size from scm_mallocated, - which underflowed. Since it's unsigned, this looks like a - really big number, so we start GC'ing all the time. */ - abort (); - } + if (scm_mallocated < 0) + /* The byte count of allocated objects has underflowed. This is + probably because you forgot to report the sizes of objects you + have allocated, by calling scm_done_malloc or some such. When + the GC freed them, it subtracted their size from + scm_mallocated, which underflowed. */ + abort (); if (scm_gc_heap_lock) /* We've invoked the collector while a GC is already in progress. diff --git a/libguile/gc.h b/libguile/gc.h index be20a57d3..d3c08ce47 100644 --- a/libguile/gc.h +++ b/libguile/gc.h @@ -2,7 +2,7 @@ #ifndef GCH #define GCH -/* Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -72,7 +72,7 @@ extern unsigned long scm_gc_cells_collected; extern unsigned long scm_gc_malloc_collected; extern unsigned long scm_gc_ports_collected; extern unsigned long scm_cells_allocated; -extern unsigned long scm_mallocated; +extern long scm_mallocated; extern unsigned long scm_mtrigger; #ifdef DEBUG_FREELIST