diff --git a/Control/PerformanceMonitoring/PerfMonEvent/src/MemStatsHooks.cxx b/Control/PerformanceMonitoring/PerfMonEvent/src/MemStatsHooks.cxx index 99f21607e210dbfe92f94719cfbbc1d30f5577a3..9bc43a63cdbb65ca759f265c1ae64e9f01d409cd 100644 --- a/Control/PerformanceMonitoring/PerfMonEvent/src/MemStatsHooks.cxx +++ b/Control/PerformanceMonitoring/PerfMonEvent/src/MemStatsHooks.cxx @@ -13,6 +13,8 @@ #include "PerfMonEvent/MemStatsHooks.h" #include "CxxUtils/checker_macros.h" +#include "CxxUtils/features.h" + // std includes #include <pthread.h> #include <stdexcept> @@ -20,6 +22,7 @@ // mutex for the hooks static pthread_mutex_t pmon_mem_lock ATLAS_THREAD_SAFE = PTHREAD_MUTEX_INITIALIZER; +#if HAVE_MALLOC_HOOKS // holders for original hooks (locked by above mutex) static void* (*orig_malloc ATLAS_THREAD_SAFE) (size_t size, const void* caller); static void* (*orig_realloc ATLAS_THREAD_SAFE)(void* ptr, size_t size, const void* caller); @@ -29,6 +32,7 @@ static void (*orig_free ATLAS_THREAD_SAFE) (void* ptr, const void* caller); static void* pmon_mem_malloc (size_t size, const void* caller); static void* pmon_mem_realloc(void* ptr, size_t size, const void* caller); static void pmon_mem_free (void* ptr, const void* caller); +#endif //////////////////////////////////////////////////////////////////////////////// std::atomic<bool> PerfMon::MemStats::m_enabled = false; @@ -95,22 +99,27 @@ void PerfMon::MemStats::stop() void PerfMon::MemStats::installHooks() { +#if HAVE_MALLOC_HOOKS __free_hook = pmon_mem_free; __realloc_hook = pmon_mem_realloc; __malloc_hook = pmon_mem_malloc; +#endif pthread_mutex_unlock(&pmon_mem_lock); } void PerfMon::MemStats::uninstallHooks() { pthread_mutex_lock(&pmon_mem_lock); +#if HAVE_MALLOC_HOOKS __free_hook = orig_free; __realloc_hook = orig_realloc; __malloc_hook = orig_malloc; +#endif } void PerfMon::MemStats::saveHooks() { +#if HAVE_MALLOC_HOOKS // store old hooks in buffer for reset later // prevent storing ourselves in case of a double-call by user if ( __malloc_hook != pmon_mem_malloc ) { @@ -124,11 +133,13 @@ void PerfMon::MemStats::saveHooks() if ( __free_hook != pmon_mem_free ) { orig_free = __free_hook; } +#endif return; } +#if HAVE_MALLOC_HOOKS static void* pmon_mem_malloc(size_t size, const void* /*caller*/) { void *result; @@ -194,6 +205,7 @@ static void pmon_mem_free( void* ptr, const void* /*caller*/ ) return; } +#endif #endif /* __linux__ */