summaryrefslogtreecommitdiff
path: root/libguile/gc-malloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/gc-malloc.c')
-rw-r--r--libguile/gc-malloc.c22
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);