/*
- * Copyright 1998-2001 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*
* Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
BackendInfo *bi
)
{
+ bi->bi_controls = slap_known_controls;
+
bi->bi_open = 0;
bi->bi_config = 0;
bi->bi_close = 0;
bi->bi_extended = 0;
- bi->bi_acl_group = meta_back_group;
- bi->bi_acl_attribute = meta_back_attribute;
bi->bi_chk_referrals = 0;
bi->bi_connection_init = 0;
{
struct metainfo *li;
+#ifdef LDAP_CACHING
+ struct rewrite_info *rwinfo;
+ cache_manager *cm;
+ query_manager *qm;
+
+ rwinfo = rewrite_info_init( REWRITE_MODE_USE_DEFAULT );
+ if ( rwinfo == NULL ) {
+ return -1;
+ }
+
+ cm = (cache_manager *)ch_malloc(sizeof(cache_manager));
+ if ( cm == NULL ) {
+ rewrite_info_delete( rwinfo );
+ return -1;
+ }
+
+ qm = (query_manager*)ch_malloc(sizeof(query_manager));
+ if ( qm == NULL ) {
+ rewrite_info_delete( rwinfo );
+ ch_free( cm );
+ return -1;
+ }
+
+ cm->caching = 0;
+ cm->qm = qm;
+ cm->numattrsets = 0;
+ cm->numtemplates = 0;
+ cm->num_entries_limit = 5;
+ cm->cache_size = 0;
+ cm->thresh_hi = 500000;
+ cm->thresh_lo = 700000;
+ cm->num_cached_queries = 0;
+ cm->total_entries = 0;
+ cm->max_queries = 10000;
+ cm->threads = 0;
+ cm->consistency_time = slap_get_time();
+ cm->consistency_cycle_time = 1000;
+
+ qm->attr_sets = NULL;
+ qm->templates = NULL;
+ qm->lru_top = NULL;
+ qm->lru_bottom = NULL;
+
+ qm->qcfunc = query_containment;
+ qm->crfunc = cache_replacement;
+ qm->addfunc = add_query;
+ ldap_pvt_thread_mutex_init(&qm->lru_mutex);
+
+ ldap_pvt_thread_mutex_init(&cm->cache_mutex);
+ ldap_pvt_thread_mutex_init(&cm->remove_mutex);
+ ldap_pvt_thread_mutex_init( &cm->consistency_mutex );
+#endif /* LDAP_CACHING */
+
li = ch_calloc( 1, sizeof( struct metainfo ) );
if ( li == NULL ) {
return -1;
* this may change
*/
li->defaulttarget = META_DEFAULT_TARGET_NONE;
+#ifdef LDAP_CACHING
+ li->cm = cm;
+ li->rwinfo = rwinfo;
+ /* FIXME: what about qm ? */
+#endif /* LDAP_CACHING */
ldap_pvt_thread_mutex_init( &li->conn_mutex );
ldap_pvt_thread_mutex_init( &li->cache.mutex );
static void
conn_free(
- struct metaconn *lc
+ void *v_lc
)
{
- struct metasingleconn **lsc;
+ struct metaconn *lc = v_lc;
+ struct metasingleconn *lsc;
- for ( lsc = lc->conns; lsc[ 0 ] != NULL; lsc++ ) {
- if ( lsc[ 0 ]->ld != NULL ) {
- ldap_unbind( lsc[ 0 ]->ld );
+ for ( lsc = lc->conns; !META_LAST(lsc); lsc++ ) {
+ if ( lsc->ld != NULL ) {
+ ldap_unbind( lsc->ld );
}
- if ( lsc[ 0 ]->bound_dn ) {
- ber_bvfree( lsc[ 0 ]->bound_dn );
+ if ( lsc->bound_dn.bv_val ) {
+ ber_memfree( lsc->bound_dn.bv_val );
}
- free( lsc[ 0 ] );
}
free( lc->conns );
free( lc );
rewrite_info_delete( lt->rwinfo );
}
avl_free( lt->oc_map.remap, NULL );
- avl_free( lt->oc_map.map, ( AVL_FREE )mapping_free );
+ avl_free( lt->oc_map.map, mapping_free );
avl_free( lt->at_map.remap, NULL );
- avl_free( lt->at_map.map, ( AVL_FREE )mapping_free );
+ avl_free( lt->at_map.map, mapping_free );
}
int
ldap_pvt_thread_mutex_lock( &li->conn_mutex );
if ( li->conntree ) {
- avl_free( li->conntree,
- ( AVL_FREE )conn_free );
+ avl_free( li->conntree, conn_free );
}
- ldap_pvt_thread_mutex_unlock( &li->cache.mutex );
- ldap_pvt_thread_mutex_destroy( &li->cache.mutex );
-
/*
* Destroy the per-target stuff (assuming there's at
* least one ...)
ldap_pvt_thread_mutex_lock( &li->cache.mutex );
if ( li->cache.tree ) {
- avl_free( li->cache.tree,
- ( AVL_FREE )meta_dncache_free );
+ avl_free( li->cache.tree, meta_dncache_free );
}
ldap_pvt_thread_mutex_unlock( &li->cache.mutex );
ldap_pvt_thread_mutex_destroy( &li->cache.mutex );
-
+ ldap_pvt_thread_mutex_unlock( &li->conn_mutex );
+ ldap_pvt_thread_mutex_destroy( &li->conn_mutex );
}
free( be->be_private );