summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Blandy <jimb@red-bean.com>1999-06-16 10:18:27 +0000
committerJim Blandy <jimb@red-bean.com>1999-06-16 10:18:27 +0000
commita5c314c80ec44425bedc2137c539dea0c005672c (patch)
tree7a3aa9d96221508bfa4ce7cade2db7acd4e0e521
parentd2ab9696bbbdb527393b8140f5345a5462358bf9 (diff)
downloadguile-a5c314c80ec44425bedc2137c539dea0c005672c.tar.gz
* 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.)
-rw-r--r--libguile/gc.c20
-rw-r--r--libguile/gc.h4
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