From 8c3f485d8b857fd5e96167a974071e6ec82e8389 Mon Sep 17 00:00:00 2001 From: Ben Collins Date: Wed, 17 Feb 1999 01:55:03 +0000 Subject: [PATCH] Implemented all of the (db_)destroy and (db_)close functions --- servers/slapd/back-tcl/external.h | 3 ++- servers/slapd/back-tcl/tcl_close.c | 38 ++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/servers/slapd/back-tcl/external.h b/servers/slapd/back-tcl/external.h index c3487d8177..e65fb2edc7 100644 --- a/servers/slapd/back-tcl/external.h +++ b/servers/slapd/back-tcl/external.h @@ -1,5 +1,5 @@ /* - * $Id$ + * $Id: external.h,v 1.3 1999/02/16 23:26:05 bcollins Exp $ */ #ifndef _TCL_EXTERNAL_H @@ -14,6 +14,7 @@ extern int tcl_back_destroy LDAP_P(( BackendInfo *bi )); extern int tcl_back_db_init LDAP_P(( BackendDB *bd )); extern int tcl_back_db_open LDAP_P(( BackendDB *bd )); +extern int tcl_back_db_close LDAP_P(( BackendDB *bd )); extern int tcl_back_db_destroy LDAP_P(( BackendDB *bd )); extern int tcl_back_db_config LDAP_P(( BackendDB *bd, diff --git a/servers/slapd/back-tcl/tcl_close.c b/servers/slapd/back-tcl/tcl_close.c index 007bb6c2b6..085a4e41c1 100644 --- a/servers/slapd/back-tcl/tcl_close.c +++ b/servers/slapd/back-tcl/tcl_close.c @@ -7,6 +7,10 @@ * as authorized by the OpenLDAP Public License. A copy of this * license is available at http://www.OpenLDAP.org/license.html or * in file LICENSE in the top-level directory of the distribution. + * + * $Id$ + * + * $Log$ */ #include "portable.h" @@ -21,7 +25,11 @@ tcl_back_close ( BackendInfo * bi ) { - return 0; + Tcl_DeleteInterp(global_i->interp); + Tcl_Free(global_i->interp); + free(global_i); + + return( 0 ); } int @@ -29,28 +37,50 @@ tcl_back_destroy( BackendInfo *bi ) { - ldap_pvt_thread_mutex_destroy( &tcl_interpreter_mutex ); + ldap_pvt_thread_mutex_destroy( &tcl_interpreter_mutex ); - return 0; + return( 0 ); } int -tcl_back_db_destroy( +tcl_back_db_close( BackendDB *bd ) { struct tclinfo *ti = (struct tclinfo *) bd->be_private; struct i_info *ti_tmp; + /* Disable the interp and associated struct */ ti->ti_ii->count--; if (!ti->ti_ii->count && strcasecmp("default", ti->ti_ii->name)) { /* no more db's using this and it's not the default */ for(ti_tmp = global_i; ti_tmp->next != ti->ti_ii; ti_tmp = ti_tmp->next) ; + /* This bypasses this interp struct in the global hash */ ti_tmp->next = ti->ti_ii->next; + Tcl_DeleteInterp(ti->ti_ii->interp); + } + return( 0 ); +} + +int +tcl_back_db_destroy( + BackendDB *bd +) +{ + struct tclinfo *ti = (struct tclinfo *) bd->be_private; + + /* + * Now free up the allocated memory used + */ + ti->ti_ii->count--; + if (!ti->ti_ii->count && strcasecmp("default", ti->ti_ii->name)) { + Tcl_Free(ti->ti_ii->interp); free(ti->ti_ii); free(ti); } free( bd->be_private ); bd->be_private = NULL; + + return( 0 ); } -- 2.39.5