From 495f658861936418f00436b571a30d577abcddb3 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 20 Sep 2011 11:28:25 +0000 Subject: [PATCH] support mtrace in eina at runtime. easier now to enable via env vars. SVN revision: 63498 --- legacy/eina/configure.ac | 3 +++ legacy/eina/src/lib/eina_main.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/legacy/eina/configure.ac b/legacy/eina/configure.ac index 2401b71420..e2c997d2d8 100644 --- a/legacy/eina/configure.ac +++ b/legacy/eina/configure.ac @@ -488,6 +488,9 @@ AC_SUBST([dlopen_libs]) EFL_CHECK_FNMATCH([], [AC_MSG_ERROR([Cannot find fnmatch()])]) +AC_CHECK_HEADERS([mcheck.h], [AC_DEFINE([HAVE_MCHECK], [1], [Have mcheck.h])]) +AC_CHECK_FUNCS([mtrace], [AC_DEFINE([HAVE_MTRACE], [1], [Have mtrace])]) + # iconv library have_iconv="no" AC_ARG_WITH([iconv-link], diff --git a/legacy/eina/src/lib/eina_main.c b/legacy/eina/src/lib/eina_main.c index fe9f8bc221..3780adac57 100644 --- a/legacy/eina/src/lib/eina_main.c +++ b/legacy/eina/src/lib/eina_main.c @@ -37,6 +37,16 @@ # endif #endif +#ifdef HAVE_MCHECK +# ifdef HAVE_MTRACE +# define MT 1 +# endif +#endif + +#ifdef MT +#include +#endif + #include "eina_lock.h" #include "eina_config.h" #include "eina_private.h" @@ -97,6 +107,10 @@ EAPI pthread_t _eina_main_loop; static pid_t _eina_pid; #endif +#ifdef MT +static int _mt_enabled = 0; +#endif + #ifdef EINA_HAVE_DEBUG_THREADS EAPI int _eina_threads_debug = 0; EAPI pthread_mutex_t _eina_tracking_lock; @@ -213,6 +227,14 @@ eina_init(void) if (EINA_LIKELY(_eina_main_count > 0)) return ++_eina_main_count; +#ifdef MT + if ((getenv("EINA_MTRACE")) && (getenv("MALLOC_TRACE"))) + { + _mt_enabled = 1; + mtrace(); + } +#endif + if (!eina_log_init()) { fprintf(stderr, "Could not initialize eina logging system.\n"); @@ -273,6 +295,13 @@ eina_shutdown(void) #ifdef EINA_HAVE_DEBUG_THREADS pthread_mutex_destroy(&_eina_tracking_lock); #endif +#ifdef MT + if (_mt_enabled) + { + muntrace(); + _mt_enabled = 0; + } +#endif } return _eina_main_count;