diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | libguile/gc-malloc.c | 4 | ||||
-rw-r--r-- | libguile/gc.c | 4 |
3 files changed, 9 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index d63dd6326..0cfe96165 100644 --- a/configure.ac +++ b/configure.ac @@ -1259,7 +1259,7 @@ save_LIBS="$LIBS" LIBS="$BDW_GC_LIBS $LIBS" CFLAGS="$BDW_GC_CFLAGS $CFLAGS" -AC_CHECK_FUNCS([GC_do_blocking GC_call_with_gc_active GC_pthread_exit GC_pthread_cancel GC_allow_register_threads GC_pthread_sigmask GC_set_start_callback GC_get_heap_usage_safe GC_get_free_space_divisor]) +AC_CHECK_FUNCS([GC_do_blocking GC_call_with_gc_active GC_pthread_exit GC_pthread_cancel GC_allow_register_threads GC_pthread_sigmask GC_set_start_callback GC_get_heap_usage_safe GC_get_free_space_divisor GC_gcollect_and_unmap GC_get_unmapped_bytes]) # Though the `GC_do_blocking ()' symbol is present in GC 7.1, it is not # declared, and has a different type (returning void instead of diff --git a/libguile/gc-malloc.c b/libguile/gc-malloc.c index 72142caaa..b7781f3e7 100644 --- a/libguile/gc-malloc.c +++ b/libguile/gc-malloc.c @@ -96,7 +96,11 @@ scm_realloc (void *mem, size_t size) return ptr; /* Time is hard: trigger a full, ``stop-the-world'' GC, and try again. */ +#ifdef HAVE_GC_GCOLLECT_AND_UNMAP GC_gcollect_and_unmap (); +#else + GC_gcollect (); +#endif SCM_SYSCALL (ptr = realloc (mem, size)); if (ptr) diff --git a/libguile/gc.c b/libguile/gc.c index ff1ebe6b1..0ab27a5e6 100644 --- a/libguile/gc.c +++ b/libguile/gc.c @@ -205,7 +205,11 @@ GC_get_heap_usage_safe (GC_word *pheap_size, GC_word *pfree_bytes, { *pheap_size = GC_get_heap_size (); *pfree_bytes = GC_get_free_bytes (); +#ifdef HAVE_GC_GET_UNMAPPED_BYTES *punmapped_bytes = GC_get_unmapped_bytes (); +#else + *punmapped_bytes = 0; +#endif *pbytes_since_gc = GC_get_bytes_since_gc (); *ptotal_bytes = GC_get_total_bytes (); } |