]> git.sur5r.net Git - openldap/commitdiff
Add hacks to allow debugging with CSRI malloc.
authorKurt Zeilenga <kurt@openldap.org>
Thu, 19 Aug 1999 17:06:28 +0000 (17:06 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 19 Aug 1999 17:06:28 +0000 (17:06 +0000)
(test001-populate runs without leak)
Free global entry string buffer on shutdown.

include/ac/stdlib.h
servers/slapd/add.c
servers/slapd/ch_malloc.c
servers/slapd/entry.c
servers/slapd/init.c
servers/slapd/main.c
servers/slapd/proto-slap.h

index d642b459101a5549b891f4e062336e3efc45a501..6fc2f6a4d083084ce92deb923f5c42ca7f30c0a5 100644 (file)
 #ifndef _AC_STDLIB_H
 #define _AC_STDLIB_H
 
+#if defined( HAVE_CSRIMALLOC )
+#include <stdio.h>
+#define MALLOC_TRACE
+#include <libmalloc.h>
+#endif
+
 #include <stdlib.h>
 
 /* Ignore malloc.h if we have STDC_HEADERS */
index 441ac206847793868677295be81c8e7200f540b6..1d37dad4e35cc0ab3fcab2d781754ae798cd7f39 100644 (file)
@@ -83,8 +83,6 @@ do_add( Connection *conn, Operation *op )
        e->e_ndn = ndn;
        e->e_private = NULL;
 
-       dn = NULL;
-
        Debug( LDAP_DEBUG_ARGS, "    do_add: ndn (%s)\n", e->e_ndn, 0, 0 );
 
        /* get the attrs */
index 61bf6d4ee1244b31f61bda72c83ab36075f9e5d6..5c57c7c021e3b070d7967082952d46fc05f521e1 100644 (file)
@@ -4,6 +4,8 @@
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
+#define CH_FREE 1
+
 #include "portable.h"
 
 #include <stdio.h>
@@ -15,6 +17,8 @@
 
 #include "slap.h"
 
+#ifndef CSRIMALLOC
+
 void *
 ch_malloc(
     ber_len_t  size
@@ -97,3 +101,5 @@ ch_free( void *ptr )
 {
        ber_memfree( ptr );
 }
+
+#endif
index 370864ba77a232f4807d5f0a8db761fe84b832c5..fd6fd49a5f6647816cd23f7c55314850b03053a5 100644 (file)
@@ -19,6 +19,15 @@ static unsigned char *ebuf;  /* buf returned by entry2str             */
 static unsigned char   *ecur;  /* pointer to end of currently used ebuf */
 static int             emaxsize;/* max size of ebuf                     */
 
+int entry_destroy(void)
+{
+       free( *ebuf );
+       ebuf = NULL;
+       ecur = NULL;
+       emaxsize = 0;
+       return 0;
+}
+
 Entry *
 str2entry( char *s )
 {
index 5e0fcb3e381bf06063f3d86c47c4f036f8950407..d46b90d3c7d3f9fecc187236562582a32ad7e15b 100644 (file)
@@ -162,6 +162,8 @@ int slap_destroy(void)
 
        rc = backend_destroy();
 
+       entry_destroy();
+
        ldap_pvt_thread_destroy();
 
        /* should destory the above mutex */
index 9d0544573b667f45682eaf9b2c40c355421019ab..53398e99933097c65ec6cb17fed3d6352a20a40a 100644 (file)
@@ -159,6 +159,13 @@ int main( int argc, char **argv )
        int tls_port = 0;
 #endif
 
+#ifdef CSRIMALLOC
+       FILE *leakfile;
+       if( ( leakfile = fopen( "slapd.leak", "w" )) == NULL ) {
+               leakfile = stderr;
+       }
+#endif
+
        g_argc = argc;
        g_argv = argv;
 
@@ -384,6 +391,10 @@ int main( int argc, char **argv )
 #endif
 #endif /* HAVE_WINSOCK */
 
+#ifdef CSRIMALLOC
+       mal_leaktrace(1);
+#endif
+
        if ( slap_startup( NULL )  != 0 ) {
                rc = 1;
                SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
@@ -428,6 +439,7 @@ int main( int argc, char **argv )
 shutdown:
        /* remember an error during shutdown */
        rc |= slap_shutdown( NULL );
+
 destroy:
        /* remember an error during destroy */
        rc |= slap_destroy();
@@ -446,6 +458,10 @@ stop:
     closelog();
        slapd_daemon_destroy();
 
+#ifdef CSRIMALLOC
+       mal_dumpleaktrace( leakfile );
+#endif
+
        MAIN_RETURN(rc);
 }
 
index 5c29a9cf75a0ec1e03e35e4c18328fdd1da0747d..59ee788ff76a9753d7865366d7871036e09dff6c 100644 (file)
@@ -118,12 +118,25 @@ extern Attribute *backend_subschemasubentry( Backend * );
  * ch_malloc.c
  */
 
+#ifdef CSRIMALLOC
+#define ch_malloc malloc
+#define ch_realloc realloc
+#define ch_calloc calloc
+#define ch_strdup strdup
+#define ch_free free
+
+#else
 void * ch_malloc LDAP_P(( ber_len_t size ));
 void * ch_realloc LDAP_P(( void *block, ber_len_t size ));
 void * ch_calloc LDAP_P(( ber_len_t nelem, ber_len_t size ));
 char * ch_strdup LDAP_P(( const char *string ));
 void   ch_free LDAP_P(( void * ));
+
+#ifndef CH_FREE
+#undef free
 #define free ch_free
+#endif
+#endif
 
 /*
  * charray.c
@@ -206,6 +219,8 @@ void build_new_dn LDAP_P(( char ** new_dn, char *e_dn, char * p_dn,
  * entry.c
  */
 
+int entry_destroy LDAP_P((void));
+
 Entry * str2entry LDAP_P(( char        *s ));
 char * entry2str LDAP_P(( Entry *e, int *len ));
 void entry_free LDAP_P(( Entry *e ));