Commit 3f6e4f38 authored by Sam Thursfield's avatar Sam Thursfield
Browse files

malloc_trim() is not available in musl libc

So detect it and use it conditionally.

Closes #135
parent 1b78faca
Pipeline #216314 passed with stage
in 1 minute and 51 seconds
...@@ -50,6 +50,9 @@ ...@@ -50,6 +50,9 @@
/* Define if we have libseccomp */ /* Define if we have libseccomp */
#mesondefine HAVE_LIBSECCOMP #mesondefine HAVE_LIBSECCOMP
/* Define if we have malloc_trim() */
#mesondefine HAVE_MALLOC_TRIM
/* Define if we have NetworkManager for network status detection */ /* Define if we have NetworkManager for network status detection */
#mesondefine HAVE_NETWORK_MANAGER #mesondefine HAVE_NETWORK_MANAGER
......
...@@ -327,6 +327,8 @@ endif ...@@ -327,6 +327,8 @@ endif
conf = configuration_data() conf = configuration_data()
have_malloc_trim = meson.get_compiler('c').has_function('malloc_trim')
# Config that goes in config.h # Config that goes in config.h
conf.set('GUARANTEE_METADATA', get_option('guarantee_metadata') == true) conf.set('GUARANTEE_METADATA', get_option('guarantee_metadata') == true)
conf.set('USING_UNZIPPSFILES', get_option('unzip_ps_gz_files') == 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') ...@@ -343,6 +345,7 @@ conf.set('HAVE_LIBICU_CHARSET_DETECTION', charset_library_name == 'icu')
conf.set('HAVE_LIBEXIF', libexif.found()) conf.set('HAVE_LIBEXIF', libexif.found())
conf.set('HAVE_LIBIPTCDATA', libiptcdata.found()) conf.set('HAVE_LIBIPTCDATA', libiptcdata.found())
conf.set('HAVE_LIBSECCOMP', libseccomp.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_UPOWER', battery_detection_library_name == 'upower')
conf.set('HAVE_NETWORK_MANAGER', have_network_manager) conf.set('HAVE_NETWORK_MANAGER', have_network_manager)
conf.set('DOMAIN_PREFIX', get_option('domain_prefix')) conf.set('DOMAIN_PREFIX', get_option('domain_prefix'))
...@@ -470,6 +473,7 @@ summary = [ ...@@ -470,6 +473,7 @@ summary = [
'\nFeature Support:', '\nFeature Support:',
' Battery/mains power detection: ' + battery_detection_library_name, ' Battery/mains power detection: ' + battery_detection_library_name,
' Support for network status detection: ' + have_network_manager.to_string(), ' Support for network status detection: ' + have_network_manager.to_string(),
' Releasing heap memory with malloc_trim: ' + have_malloc_trim.to_string(),
'\nData Miners / Writebacks:', '\nData Miners / Writebacks:',
' FS (File System): ' + have_tracker_miner_fs.to_string(), ' FS (File System): ' + have_tracker_miner_fs.to_string(),
' RSS: ' + have_tracker_miner_rss.to_string(), ' RSS: ' + have_tracker_miner_rss.to_string(),
......
...@@ -26,6 +26,10 @@ ...@@ -26,6 +26,10 @@
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#ifdef HAVE_MALLOC_TRIM
#include <malloc.h>
#endif
#include <glib.h> #include <glib.h>
#include <glib-unix.h> #include <glib-unix.h>
#include <glib-object.h> #include <glib-object.h>
...@@ -433,11 +437,28 @@ miner_start (TrackerMiner *miner, ...@@ -433,11 +437,28 @@ miner_start (TrackerMiner *miner,
miner); miner);
} }
#ifdef HAVE_MALLOC_TRIM
static void
release_heap_memory (void)
{
malloc_trim (0);
}
#else
static void
release_heap_memory (void)
{
g_debug ("release_heap_memory(): Doing nothing as malloc_trim() is not available on this platform.");
}
#endif
static gboolean static gboolean
cleanup_cb (gpointer user_data) cleanup_cb (gpointer user_data)
{ {
/* Reclaim as much memory as possible */ release_heap_memory ();
malloc_trim (0);
cleanup_id = 0; cleanup_id = 0;
...@@ -451,7 +472,7 @@ on_low_memory (GMemoryMonitor *monitor, ...@@ -451,7 +472,7 @@ on_low_memory (GMemoryMonitor *monitor,
gpointer user_data) gpointer user_data)
{ {
if (level > G_MEMORY_MONITOR_WARNING_LEVEL_LOW) if (level > G_MEMORY_MONITOR_WARNING_LEVEL_LOW)
malloc_trim (0); release_heap_memory ();
} }
#endif #endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment