]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Use dmalloc instead of EFence when available (dmalloc has lot of improvements
authorMartin Mares <mj@ucw.cz>
Thu, 4 Mar 1999 11:36:26 +0000 (11:36 +0000)
committerMartin Mares <mj@ucw.cz>
Thu, 4 Mar 1999 11:36:26 +0000 (11:36 +0000)
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().

configure.in
lib/resource.c
lib/resource.h
lib/xmalloc.c
sysdep/autoconf.h.in
sysdep/unix/main.c
tools/Makefile.in
tools/Rules.in

index 0b469490db29c5555408858abd375361bc1b8ab6..aa527a02b907ca3f2fb55f5c03201cb044111a15 100644 (file)
@@ -109,7 +109,10 @@ BIRD_CHECK_TIME_T
 if test "$enable_debug" = yes ; then
        AC_DEFINE(PATH_CONFIG_DIR, ".")
        AC_DEFINE(DEBUGGING)
-       AC_CHECK_LIB(efence, malloc)
+       AC_CHECK_LIB(dmalloc, dmalloc_debug)
+       if test $ac_cv_lib_dmalloc_dmalloc_debug != yes ; then
+               AC_CHECK_LIB(efence, malloc)
+       fi
 else
        AC_DEFINE_UNQUOTED(PATH_CONFIG_DIR, "$sysconfdir")
 fi
index ce0ba14b058e831f7a401114b08faacad82b5150..f2a0c7739078e25fa20bb6bf9105405b91807d95 100644 (file)
@@ -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)
 {
index 6a50c331b86cb009fdf6b23f3179cba10d210fd2..1d83b07fca41c9c84684aa7c6cf03d32d1b7c1ea 100644 (file)
@@ -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
index c1ce7ea363c44dbc8e2dbe2623f6d22516b21c35..2bec260c721ca41dadd08f39c2685093547e527c 100644 (file)
@@ -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
index a1ef2f84d281233747aae28c4f89511e8e7332ef..ae4d6b65a9a4015fc4f397f59247b7f9a46a9c8f 100644 (file)
@@ -40,3 +40,6 @@
 
 /* Path to configuration files */
 #define PATH_CONFIG_DIR ?
+
+/* Are we using dmalloc? */
+#undef HAVE_LIBDMALLOC
index e5e9934c05dab33e56bfa7f7c5c17b41bc28ddff..45940fb9e89d80bd2b6e42412fb5b9ce4e3a3555 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/signal.h>
@@ -186,6 +187,11 @@ parse_args(int argc, char **argv)
 int
 main(int argc, char **argv)
 {
+#ifdef HAVE_LIBDMALLOC
+  if (!getenv("DMALLOC_OPTIONS"))
+    dmalloc_debug(0x2f03d00);
+#endif
+
   log_init_debug(NULL);
   parse_args(argc, argv);
 
index 246872c01bae4a25216ee264692f01a5685d4d27..ce649d6b3a85bbc4c49441ecc57fbdefcc27406a 100644 (file)
@@ -14,7 +14,7 @@ subdir depend:
        set -e ; for a in $(static-dirs) ; do $(MAKE) -C $$a -f $(srcdir_abs)/$$a/Makefile $@ ; done
 
 $(exedir)/bird: $(addsuffix /all.o, $(static-dirs)) conf/all.o lib/birdlib.a
-       $(CC) $(LDFLAGS) -o $@ $^
+       $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
 
 .dir-stamp:
        mkdir -p $(static-dirs)
index 36a6eecec31083354e490e270d5e1e63245c34d2..271a4eca946a6ebcd98d21cf40015e7294568530 100644 (file)
@@ -18,7 +18,8 @@ dir-objs:=$(addprefix $(objdir)/,$(all-dirs))
 
 CPPFLAGS=-I$(root-rel) -I$(srcdir)
 CFLAGS=$(CPPFLAGS) @CFLAGS@
-LDFLAGS=@LIBS@
+LDFLAGS=
+LIBS=@LIBS@
 CC=@CC@
 M4=@M4@
 BISON=@BISON@