BackendDB cb_db; /* underlying database */
int cb_got_ldif;
int cb_use_ldif;
+ ldap_pvt_thread_rdwr_t cb_rwlock;
} CfBackInfo;
static CfBackInfo cfBackInfo;
if ( slap_pause_server() < 0 )
dopause = 0;
+ ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
+
/* Strategy:
* 1) check for existence of entry
* 2) check for sibling renumbering
}
out2:;
+ ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
if ( dopause )
slap_unpause_server();
if ( slap_pause_server() < 0 )
do_pause = 0;
}
+ ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
/* Strategy:
* 1) perform the Modify on the cached Entry.
op->o_ndn = ndn;
}
+ ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
if ( do_pause )
slap_unpause_server();
out:
if ( slap_pause_server() < 0 )
dopause = 0;
+ ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
+
if ( ce->ce_type == Cft_Schema ) {
req_modrdn_s modr = op->oq_modrdn;
struct berval rdn;
op->oq_modrdn = modr;
}
+ ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
+
if ( dopause )
slap_unpause_server();
out:
if ( slap_pause_server() < 0 )
dopause = 0;
+ ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
+
if ( ce->ce_type == Cft_Overlay ){
overlay_remove( ce->ce_be, (slap_overinst *)ce->ce_bi, op );
} else if ( ce->ce_type == Cft_Misc ) {
if ( !oc_at ) {
rs->sr_err = LDAP_OTHER;
rs->sr_text = "objectclass not found";
- if ( dopause ) slap_unpause_server();
- goto out;
+ goto out2;
}
for ( i=0; !BER_BVISNULL(&oc_at->a_nvals[i]); i++ ) {
co.co_name = &oc_at->a_nvals[i];
/* FIXME: We should return a helpful error message
* here */
}
- if ( dopause ) slap_unpause_server();
- goto out;
+ goto out2;
}
break;
}
if ( ce->ce_be == frontendDB || ce->ce_be == op->o_bd ){
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
rs->sr_text = "Cannot delete config or frontend database";
- if ( dopause ) slap_unpause_server();
- goto out;
+ goto out2;
}
if ( ce->ce_be->bd_info->bi_db_close ) {
ce->ce_be->bd_info->bi_db_close( ce->ce_be, NULL );
ce->ce_entry->e_private=NULL;
entry_free(ce->ce_entry);
ch_free(ce);
+out2:
+ ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
if ( dopause ) slap_unpause_server();
} else {
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
cfb = (CfBackInfo *)op->o_bd->be_private;
+ ldap_pvt_thread_rdwr_rlock( &cfb->cb_rwlock );
ce = config_find_base( cfb->cb_root, &op->o_req_ndn, &last );
if ( !ce ) {
if ( last )
}
out:
+ ldap_pvt_thread_rdwr_runlock( &cfb->cb_rwlock );
send_ldap_result( op, rs );
return rs->sr_err;
}
ch_free( cfdir.bv_val );
+ ldap_pvt_thread_rdwr_destroy( &cfb->cb_rwlock );
+
ldap_avl_free( CfOcTree, NULL );
if ( cfb->cb_db.bd_info ) {
ber_dupbv( &dn, &be->be_rootdn );
ber_bvarray_add( &be->be_nsuffix, &dn );
+ ldap_pvt_thread_rdwr_init( &cfb->cb_rwlock );
+
/* Hide from namingContexts */
SLAP_BFLAGS(be) |= SLAP_BFLAG_CONFIG;