aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac1
-rw-r--r--gc.c4
-rw-r--r--process.c1
3 files changed, 6 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 30a1350fa6..70400dd797 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2078,6 +2078,7 @@ AC_CHECK_FUNCS(lstat)
AC_CHECK_FUNCS(lutimes)
AC_CHECK_FUNCS(malloc_usable_size)
AC_CHECK_FUNCS(malloc_size)
+AC_CHECK_FUNCS(malloc_trim)
AC_CHECK_FUNCS(mblen)
AC_CHECK_FUNCS(memalign)
AC_CHECK_FUNCS(memset_s)
diff --git a/gc.c b/gc.c
index 3fd2a3b33f..662ddc3e0f 100644
--- a/gc.c
+++ b/gc.c
@@ -9740,6 +9740,10 @@ rb_gc_prepare_heap(void)
rb_objspace_each_objects(gc_set_candidate_object_i, NULL);
gc_start_internal(NULL, Qtrue, Qtrue, Qtrue, Qtrue, Qtrue);
free_empty_pages();
+
+#if defined(HAVE_MALLOC_TRIM) && !defined(RUBY_ALTERNATIVE_MALLOC_HEADER)
+ malloc_trim(0);
+#endif
}
static int
diff --git a/process.c b/process.c
index d7e04830ee..690872ad36 100644
--- a/process.c
+++ b/process.c
@@ -8789,6 +8789,7 @@ static VALUE rb_mProcID_Syscall;
* * Precomputes the coderange of all strings.
* * Frees all empty heap pages and increments the allocatable pages counter
* by the number of pages freed.
+ * * Invoke +malloc_trim+ if available to free empty malloc pages.
*/
static VALUE