summaryrefslogtreecommitdiff
path: root/src/lib/eina/eina_evlog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/eina/eina_evlog.c')
-rw-r--r--src/lib/eina/eina_evlog.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/lib/eina/eina_evlog.c b/src/lib/eina/eina_evlog.c
index 9c9cbccdaf..3e5f3c55f2 100644
--- a/src/lib/eina/eina_evlog.c
+++ b/src/lib/eina/eina_evlog.c
@@ -20,6 +20,11 @@
# include "config.h"
#endif
+#ifdef HAVE_VALGRIND
+# include <valgrind.h>
+# include <memcheck.h>
+#endif
+
#include "Eina.h"
#include "eina_evlog.h"
#include "eina_debug.h"
@@ -97,13 +102,19 @@ alloc_buf(Eina_Evlog_Buf *b, unsigned int size)
if (b->buf) return;
b->size = size;
b->top = 0;
-# ifdef HAVE_MMAP
- b->buf = mmap(NULL, size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANON, -1, 0);
- if (b->buf == MAP_FAILED) b->buf = NULL;
-# else
- b->buf = malloc(size);
+#ifdef HAVE_MMAP
+# ifdef HAVE_VALGRIND
+ if (RUNNING_ON_VALGRIND) b->buf = malloc(size);
+ else
# endif
+ {
+ b->buf = mmap(NULL, size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON, -1, 0);
+ if (b->buf == MAP_FAILED) b->buf = NULL;
+ }
+#else
+ b->buf = malloc(size);
+#endif
b->overflow = 0;
}
@@ -111,11 +122,15 @@ static void
free_buf(Eina_Evlog_Buf *b)
{
if (!b->buf) return;
-# ifdef HAVE_MMAP
+#ifdef HAVE_MMAP
+# ifdef HAVE_VALGRIND
+ if (RUNNING_ON_VALGRIND) free(b->buf);
+ else
+# endif
munmap(b->buf, b->size);
-# else
+#else
free(b->buf);
-# endif
+#endif
b->buf = NULL;
b->size = 0;
b->top = 0;