1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 01:00:20 +02:00

(scm_gc_register_collectable_memory): avoid

wrap-around for scm_mtrigger
(scm_gc_register_collectable_memory): abort on overflowing
scm_mallocated().
This commit is contained in:
Han-Wen Nienhuys 2003-05-14 11:01:23 +00:00
parent 59e4263131
commit 131805f0cd
2 changed files with 18 additions and 2 deletions

View file

@ -1,3 +1,10 @@
2003-05-14 Han-Wen Nienhuys <hanwen@cs.uu.nl>
* gc-malloc.c (scm_gc_register_collectable_memory): avoid
wrap-around for scm_mtrigger
(scm_gc_register_collectable_memory): abort on overflowing
scm_mallocated().
2003-05-13 Kevin Ryde <user42@zip.com.au>
* numbers.c (xmpz_cmp_d): New macro, handling infs if gmp doesn't.

View file

@ -180,6 +180,11 @@ scm_strdup (const char *str)
void
scm_gc_register_collectable_memory (void *mem, size_t size, const char *what)
{
if (ULONG_MAX - size < scm_mallocated)
{
scm_memory_error ("Overflow of scm_mallocated: too much memory in use.");
}
scm_mallocated += size;
/*
@ -230,6 +235,11 @@ scm_gc_register_collectable_memory (void *mem, size_t size, const char *what)
float no_overflow_trigger = scm_mallocated * 110.0;
no_overflow_trigger /= (float) (100.0 - scm_i_minyield_malloc);
if (no_overflow_trigger >= (float) ULONG_MAX)
scm_mtrigger = ULONG_MAX;
else
scm_mtrigger = (unsigned long) no_overflow_trigger;
#ifdef DEBUGINFO
@ -268,7 +278,6 @@ scm_gc_malloc (size_t size, const char *what)
again in scm_gc_register_collectable_memory. We don't really
want the second GC since it will not find new garbage.
Note: this is a theoretical peeve. In reality, malloc() never
returns NULL. Usually, memory is overcommitted, and when you try
to write it the program is killed with signal 11. --hwn