From a399be7f24d58080282316d1ec529bf5aed67634 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Tue, 24 Feb 2015 00:06:54 +0100 Subject: try hard to free heap memory after command-line termination using malloc_trim() * this is a Linux/glibc-only optimization --- configure.ac | 5 +++++ src/cmdline.cpp | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 77b71a7..e2f230f 100644 --- a/configure.ac +++ b/configure.ac @@ -94,6 +94,11 @@ case $host in ;; esac +# Check for optional GNU libc features. +# Will probably only be found on Linux. +AC_CHECK_HEADERS([malloc.h]) +AC_CHECK_FUNCS([malloc_trim]) + # # Config options # diff --git a/src/cmdline.cpp b/src/cmdline.cpp index 83a90b4..599a469 100644 --- a/src/cmdline.cpp +++ b/src/cmdline.cpp @@ -19,6 +19,10 @@ #include "config.h" #endif +#ifdef HAVE_MALLOC_H +#include +#endif + #include #include @@ -446,10 +450,17 @@ Cmdline::process_edit_cmd(gchar key) str = NULL; len = rubout_len = 0; +#ifdef HAVE_MALLOC_TRIM /* - * FIXME: Perhaps to the malloc_trim() here - * instead of in UndoStack::clear() + * Glibc/Linux-only optimization: Undo stacks can grow very + * large - sometimes large enough to make the system + * swap and become unresponsive. + * This will often reduce the amount of memory previously + * freed that's still allocated to the program immediately + * when the command-line is terminated: */ + malloc_trim(0); +#endif } else { insert(key); } -- cgit v1.2.3