[tracker-miners/sam/malloc-trim-glibc-only] malloc_trim() is not available in musl libc
- From: Sam Thursfield <sthursfield src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/sam/malloc-trim-glibc-only] malloc_trim() is not available in musl libc
- Date: Mon, 21 Sep 2020 16:20:19 +0000 (UTC)
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]