From: Pierangelo Masarati Date: Sun, 7 Aug 2005 17:28:26 +0000 (+0000) Subject: plug more leaks; few remain (but seem to be in ODBC) X-Git-Tag: OPENLDAP_AC_BP~71 X-Git-Url: https://git.sur5r.net/?p=openldap;a=commitdiff_plain;h=92527ee15b493f87322db5a6360f11ce41c0a410 plug more leaks; few remain (but seem to be in ODBC) --- diff --git a/servers/slapd/back-sql/init.c b/servers/slapd/back-sql/init.c index f5502eb237..cf1c798cd3 100644 --- a/servers/slapd/back-sql/init.c +++ b/servers/slapd/back-sql/init.c @@ -117,6 +117,7 @@ backsql_db_destroy( backsql_info *bi = (backsql_info*)bd->be_private; Debug( LDAP_DEBUG_TRACE, "==>backsql_db_destroy()\n", 0, 0, 0 ); + ldap_pvt_thread_mutex_lock( &bi->sql_dbconn_mutex ); backsql_free_db_env( bi ); ldap_pvt_thread_mutex_unlock( &bi->sql_dbconn_mutex ); @@ -125,37 +126,76 @@ backsql_db_destroy( backsql_destroy_schema_map( bi ); ldap_pvt_thread_mutex_unlock( &bi->sql_schema_mutex ); ldap_pvt_thread_mutex_destroy( &bi->sql_schema_mutex ); - free( bi->sql_dbname ); - free( bi->sql_dbuser ); + + if ( bi->sql_dbname ) { + ch_free( bi->sql_dbname ); + } + if ( bi->sql_dbuser ) { + ch_free( bi->sql_dbuser ); + } if ( bi->sql_dbpasswd ) { - free( bi->sql_dbpasswd ); + ch_free( bi->sql_dbpasswd ); } if ( bi->sql_dbhost ) { - free( bi->sql_dbhost ); + ch_free( bi->sql_dbhost ); } if ( bi->sql_upper_func.bv_val ) { - free( bi->sql_upper_func.bv_val ); - free( bi->sql_upper_func_open.bv_val ); - free( bi->sql_upper_func_close.bv_val ); + ch_free( bi->sql_upper_func.bv_val ); + ch_free( bi->sql_upper_func_open.bv_val ); + ch_free( bi->sql_upper_func_close.bv_val ); + } + if ( bi->sql_concat_func ) { + ber_bvarray_free( bi->sql_concat_func ); + } + if ( !BER_BVISNULL( &bi->sql_strcast_func ) ) { + ch_free( bi->sql_strcast_func.bv_val ); + } + if ( !BER_BVISNULL( &bi->sql_children_cond ) ) { + ch_free( bi->sql_children_cond.bv_val ); + } + if ( !BER_BVISNULL( &bi->sql_subtree_cond ) ) { + ch_free( bi->sql_subtree_cond.bv_val ); + } + if ( !BER_BVISNULL( &bi->sql_dn_oc_aliasing ) ) { + ch_free( bi->sql_dn_oc_aliasing.bv_val ); + } + if ( bi->sql_oc_query ) { + ch_free( bi->sql_oc_query ); + } + if ( bi->sql_at_query ) { + ch_free( bi->sql_at_query ); + } + if ( bi->sql_id_query ) { + ch_free( bi->sql_id_query ); + } + if ( bi->sql_has_children_query ) { + ch_free( bi->sql_has_children_query ); + } + if ( bi->sql_insentry_stmt ) { + ch_free( bi->sql_insentry_stmt ); + } + if ( bi->sql_delentry_stmt ) { + ch_free( bi->sql_delentry_stmt ); + } + if ( bi->sql_renentry_stmt ) { + ch_free( bi->sql_renentry_stmt ); + } + if ( bi->sql_delobjclasses_stmt ) { + ch_free( bi->sql_delobjclasses_stmt ); + } + if ( !BER_BVISNULL( &bi->sql_aliasing ) ) { + ch_free( bi->sql_aliasing.bv_val ); + } + if ( !BER_BVISNULL( &bi->sql_aliasing_quote ) ) { + ch_free( bi->sql_aliasing_quote.bv_val ); } - - free( bi->sql_subtree_cond.bv_val ); - free( bi->sql_oc_query ); - free( bi->sql_at_query ); - free( bi->sql_insentry_stmt ); - free( bi->sql_delentry_stmt ); - free( bi->sql_renentry_stmt ); - free( bi->sql_delobjclasses_stmt ); - - free( bi->sql_aliasing.bv_val ); - free( bi->sql_aliasing_quote.bv_val ); if ( bi->sql_anlist ) { int i; - for ( i = 0; !BER_BVISNULL( &bi->sql_anlist[i].an_name ); i++ ) + for ( i = 0; !BER_BVISNULL( &bi->sql_anlist[ i ].an_name ); i++ ) { - ch_free( bi->sql_anlist[i].an_name.bv_val ); + ch_free( bi->sql_anlist[ i ].an_name.bv_val ); } ch_free( bi->sql_anlist ); } @@ -164,7 +204,7 @@ backsql_db_destroy( entry_free( bi->sql_baseObject ); } - free( bi ); + ch_free( bi ); Debug( LDAP_DEBUG_TRACE, "<==backsql_db_destroy()\n", 0, 0, 0 ); return 0; @@ -259,7 +299,7 @@ backsql_db_open( return 1; } - if ( bi->sql_subtree_cond.bv_val == NULL ) { + if ( BER_BVISNULL( &bi->sql_subtree_cond ) ) { /* * Prepare concat function for subtree search condition */ @@ -309,6 +349,8 @@ backsql_db_open( &concat ); } + ch_free( concat.bv_val ); + bi->sql_subtree_cond = bb.bb_val; Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): " @@ -422,6 +464,7 @@ backsql_db_open( bi->sql_delobjclasses_stmt = ch_strdup( backsql_def_delobjclasses_stmt ); } + /* This should just be to force schema loading */ op->o_hdr = (Opheader *)&op[ 1 ]; op->o_connid = (unsigned long)(-1); op->o_bd = bd; @@ -430,6 +473,7 @@ backsql_db_open( "connection failed, exiting\n", 0, 0, 0 ); return 1; } + (void)backsql_free_db_conn( op ); /* * Prepare ID selection query @@ -523,6 +567,8 @@ backsql_db_close( int backsql_connection_destroy( Backend *bd, Connection *c ) { + backsql_info *bi = (backsql_info*)bd->be_private; + char opbuf[ OPERATION_BUFFER_SIZE ]; Operation* op = (Operation *)opbuf; diff --git a/servers/slapd/back-sql/schema-map.c b/servers/slapd/back-sql/schema-map.c index 3b9c8f8fab..02a73924ce 100644 --- a/servers/slapd/back-sql/schema-map.c +++ b/servers/slapd/back-sql/schema-map.c @@ -843,6 +843,12 @@ backsql_free_attr( void *v_at ) ch_free( at->bam_query ); } +#ifdef BACKSQL_COUNTQUERY + if ( at->bam_countquery != NULL ) { + ch_free( at->bam_countquery ); + } +#endif /* BACKSQL_COUNTQUERY */ + /* TimesTen */ if ( !BER_BVISNULL( &at->bam_sel_expr_u ) ) { ch_free( at->bam_sel_expr_u.bv_val ); diff --git a/servers/slapd/back-sql/sql-wrap.c b/servers/slapd/back-sql/sql-wrap.c index 79738eb929..8173d50468 100644 --- a/servers/slapd/back-sql/sql-wrap.c +++ b/servers/slapd/back-sql/sql-wrap.c @@ -268,7 +268,10 @@ backsql_close_db_conn( backsql_db_conn *conn ) SQLTransact( SQL_NULL_HENV, conn->dbh, SQL_ROLLBACK ); SQLDisconnect( conn->dbh ); SQLFreeConnect( conn->dbh ); + ch_free( conn ); + Debug( LDAP_DEBUG_TRACE, "<==backsql_close_db_conn()\n", 0, 0, 0 ); + return 1; }