diff options
author | Martin Mares <mj@ucw.cz> | 1999-03-04 12:36:26 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1999-03-04 12:36:26 +0100 |
commit | 7a2105becdbadf20c1b4e4d2359e339c90610825 (patch) | |
tree | 524bc4947ec1938cd48e3ec6a44a9f66983f8e4b /lib | |
parent | aa64578641c15b137172acc927d9d7af5914576b (diff) | |
download | bird-7a2105becdbadf20c1b4e4d2359e339c90610825.tar bird-7a2105becdbadf20c1b4e4d2359e339c90610825.zip |
Use dmalloc instead of EFence when available (dmalloc has lot of improvements
over EFence and also hopefully smaller memory overhead, but sadly it's non-free
for commercial use).
If the DMALLOC_OPTIONS environment variable is not set, switch on `reasonable'
checks by default.
Also introduced mb_allocz() for cleared mb_alloc().
Diffstat (limited to 'lib')
-rw-r--r-- | lib/resource.c | 9 | ||||
-rw-r--r-- | lib/resource.h | 18 | ||||
-rw-r--r-- | lib/xmalloc.c | 6 |
3 files changed, 31 insertions, 2 deletions
diff --git a/lib/resource.c b/lib/resource.c index ce0ba14..f2a0c77 100644 --- a/lib/resource.c +++ b/lib/resource.c @@ -8,6 +8,7 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include "nest/bird.h" #include "lib/resource.h" @@ -156,6 +157,14 @@ mb_alloc(pool *p, unsigned size) return b->data; } +void * +mb_allocz(pool *p, unsigned size) +{ + void *x = mb_alloc(p, size); + bzero(x, size); + return x; +} + void mb_free(void *m) { diff --git a/lib/resource.h b/lib/resource.h index 6a50c33..1d83b07 100644 --- a/lib/resource.h +++ b/lib/resource.h @@ -43,6 +43,7 @@ extern pool root_pool; /* Normal memory blocks */ void *mb_alloc(pool *, unsigned size); +void *mb_allocz(pool *, unsigned size); void mb_free(void *); /* Memory pools with linear allocation */ @@ -62,9 +63,24 @@ slab *sl_new(pool *, unsigned size); void *sl_alloc(slab *); void sl_free(slab *, void *); -/* Low-level memory allocation functions, please don't use */ +/* + * Low-level memory allocation functions, please don't use + * outside resource manager and possibly sysdep code. + */ +#ifdef HAVE_LIBDMALLOC +/* + * The standard dmalloc macros tend to produce lots of namespace + * conflicts and we use only xmalloc and xfree, so we can define + * the stubs ourselves. + */ +#define DMALLOC_DISABLE +#include <dmalloc.h> +#define xmalloc(size) _xmalloc_leap(__FILE__, __LINE__, size) +#define xfree(ptr) _xfree_leap(__FILE__, __LINE__, ptr) +#else void *xmalloc(unsigned); #define xfree(x) free(x) +#endif #endif diff --git a/lib/xmalloc.c b/lib/xmalloc.c index c1ce7ea..2bec260 100644 --- a/lib/xmalloc.c +++ b/lib/xmalloc.c @@ -1,7 +1,7 @@ /* * BIRD Library -- malloc() With Checking * - * (c) 1998 Martin Mares <mj@ucw.cz> + * (c) 1998--1999 Martin Mares <mj@ucw.cz> * * Can be freely distributed and used under the terms of the GNU GPL. */ @@ -11,6 +11,8 @@ #include "nest/bird.h" #include "lib/resource.h" +#ifndef HAVE_LIBDMALLOC + void * xmalloc(unsigned size) { @@ -19,3 +21,5 @@ xmalloc(unsigned size) return p; die("Unable to allocate %d bytes of memory", size); } + +#endif |