support mtrace in eina at runtime. easier now to enable via env vars.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 20 Sep 2011 11:28:25 +0000 (11:28 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 20 Sep 2011 11:28:25 +0000 (11:28 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@63498 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

configure.ac
src/lib/eina_main.c

index 2401b71..e2c997d 100644 (file)
@@ -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],
index fe9f8bc..3780ada 100644 (file)
 # endif
 #endif
 
+#ifdef HAVE_MCHECK
+# ifdef HAVE_MTRACE
+#  define MT 1
+# endif
+#endif
+
+#ifdef MT
+#include <mcheck.h>
+#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;