diff options
Diffstat (limited to 'src/lib/eina/eina_evlog.c')
-rw-r--r-- | src/lib/eina/eina_evlog.c | 33 |
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; |