[tracker-miners/sam/malloc-trim-glibc-only] malloc_trim() is not available in musl libc




commit 43bdf0cfecb78797ba3d78a4e83ddc2b887aa730
Author: Sam Thursfield <sam afuera me uk>
Date:   Mon Sep 21 18:19:09 2020 +0200

    malloc_trim() is not available in musl libc
    
    So detect it and use it conditionally.
    
    Closes https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/135

 meson.build                  |  3 +++
 src/miners/fs/tracker-main.c | 27 ++++++++++++++++++++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)
---
diff --git a/meson.build b/meson.build
index eae27e5ad..158a8a0cc 100644
--- a/meson.build
+++ b/meson.build
@@ -327,6 +327,8 @@ endif
 
 conf = configuration_data()
 
+have_malloc_trim = meson.get_compiler('c').has_function('malloc_trim')
+
 # Config that goes in config.h
 conf.set('GUARANTEE_METADATA', get_option('guarantee_metadata') == true)
 conf.set('USING_UNZIPPSFILES', get_option('unzip_ps_gz_files') == true)
@@ -343,6 +345,7 @@ conf.set('HAVE_LIBICU_CHARSET_DETECTION', charset_library_name == 'icu')
 conf.set('HAVE_LIBEXIF', libexif.found())
 conf.set('HAVE_LIBIPTCDATA', libiptcdata.found())
 conf.set('HAVE_LIBSECCOMP', libseccomp.found())
+conf.set('HAVE_MALLOC_TRIM', have_malloc_trim)
 conf.set('HAVE_UPOWER', battery_detection_library_name == 'upower')
 conf.set('HAVE_NETWORK_MANAGER', have_network_manager)
 conf.set('DOMAIN_PREFIX', get_option('domain_prefix'))
diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c
index bd4a484e0..fedb1e128 100644
--- a/src/miners/fs/tracker-main.c
+++ b/src/miners/fs/tracker-main.c
@@ -26,6 +26,10 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#ifdef HAVE_MALLOC_TRIM
+#include <malloc.h>
+#endif
+
 #include <glib.h>
 #include <glib-unix.h>
 #include <glib-object.h>
@@ -433,11 +437,28 @@ miner_start (TrackerMiner  *miner,
                                                   miner);
 }
 
+#ifdef HAVE_MALLOC_TRIM
+
+static void
+reclaim_heap_memory (void)
+{
+       malloc_trim (0);
+}
+
+#else
+
+static void
+reclaim_heap_memory (void)
+{
+       g_warning ("reclaim_heap_memory(): Doing nothing as malloc_trim() is not available on this 
platform.");
+}
+
+#endif
+
 static gboolean
 cleanup_cb (gpointer user_data)
 {
-       /* Reclaim as much memory as possible */
-       malloc_trim (0);
+       reclaim_heap_memory ();
 
        cleanup_id = 0;
 
@@ -451,7 +472,7 @@ on_low_memory (GMemoryMonitor            *monitor,
                gpointer                   user_data)
 {
        if (level > G_MEMORY_MONITOR_WARNING_LEVEL_LOW)
-               malloc_trim (0);
+               reclaim_heap_memory ();
 }
 #endif
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]