diff options
author | Han-Wen Nienhuys <hanwen@lilypond.org> | 2008-08-16 15:20:55 -0300 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@lilypond.org> | 2008-08-16 15:20:55 -0300 |
commit | 676d9cc55311d9c44205423a794a026e98c35ee1 (patch) | |
tree | f8f396d4e665beb4abedc9973f8416b0d6c22412 /libguile/gc-malloc.c | |
parent | 40945e5e9f5b1ecbd9a5d9f8713e25898e056198 (diff) | |
download | guile-676d9cc55311d9c44205423a794a026e98c35ee1.tar.gz |
If realloc() fails in scm_realloc, then do a complete GC with complete
sweep directly.
Diffstat (limited to 'libguile/gc-malloc.c')
-rw-r--r-- | libguile/gc-malloc.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/libguile/gc-malloc.c b/libguile/gc-malloc.c index 2dc9f0fc1..4e06f2f69 100644 --- a/libguile/gc-malloc.c +++ b/libguile/gc-malloc.c @@ -113,21 +113,17 @@ scm_realloc (void *mem, size_t size) scm_i_scm_pthread_mutex_lock (&scm_i_sweep_mutex); scm_gc_running_p = 1; - // We don't want these sweep statistics to influence results for - // cell GC, so we don't collect statistics. - scm_i_sweep_all_segments ("realloc", NULL); - - SCM_SYSCALL (ptr = realloc (mem, size)); - if (ptr) - { - scm_gc_running_p = 0; - scm_i_pthread_mutex_unlock (&scm_i_sweep_mutex); - return ptr; - } - scm_i_gc ("realloc"); + + /* + We don't want these sweep statistics to influence results for + cell GC, so we don't collect statistics. + + realloc() failed, so we're really desparate to free memory. Run a + full sweep. + */ scm_i_sweep_all_segments ("realloc", NULL); - + scm_gc_running_p = 0; scm_i_pthread_mutex_unlock (&scm_i_sweep_mutex); |