/* * close.c - tcl close routines * * Copyright 1999, Ben Collins , All rights reserved. * * Redistribution and use in source and binary forms are permitted only * 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" #include #include "slap.h" #include "tcl_back.h" int tcl_back_close ( BackendInfo * bi ) { Tcl_DeleteInterp(global_i->interp); Tcl_Free(global_i->interp); free(global_i); return( 0 ); } int tcl_back_destroy( BackendInfo *bi ) { ldap_pvt_thread_mutex_destroy( &tcl_interpreter_mutex ); return( 0 ); } int 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 ); }