X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fconfig.c;h=7a7d72bfa72355a83ce8d91a2d0d59f41dc61843;hb=26d6e699aac1f2adc77f2aad3e299b5475941dfc;hp=2cfa96ac65faca23c8ece93b654ad408941aa967;hpb=d9edc7d5afd2860fac2fa0121044db28d94c9f7f;p=openldap diff --git a/servers/slapd/back-bdb/config.c b/servers/slapd/back-bdb/config.c index 2cfa96ac65..7a7d72bfa7 100644 --- a/servers/slapd/back-bdb/config.c +++ b/servers/slapd/back-bdb/config.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2011 The OpenLDAP Foundation. + * Copyright 2000-2013 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -241,6 +241,8 @@ bdb_online_index( void *ctx, void *arg ) rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &txn, bdb->bi_db_opflags ); if ( rc ) break; + Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_online_index) ": txn id: %x\n", + txn->id(txn), 0, 0 ); if ( getnext ) { getnext = 0; BDB_ID2DISK( id, &nid ); @@ -282,17 +284,16 @@ bdb_online_index( void *ctx, void *arg ) } if ( ei->bei_e ) { rc = bdb_index_entry( op, txn, BDB_INDEX_UPDATE_OP, ei->bei_e ); - if ( rc == DB_LOCK_DEADLOCK ) { + if ( rc ) { TXN_ABORT( txn ); - ldap_pvt_thread_yield(); - continue; - } - if ( rc == 0 ) { - rc = TXN_COMMIT( txn, 0 ); - txn = NULL; - } - if ( rc ) + if ( rc == DB_LOCK_DEADLOCK ) { + ldap_pvt_thread_yield(); + continue; + } break; + } + rc = TXN_COMMIT( txn, 0 ); + txn = NULL; } id++; getnext = 1; @@ -324,31 +325,31 @@ bdb_cf_cleanup( ConfigArgs *c ) struct bdb_info *bdb = c->be->be_private; int rc = 0; - if ( bdb->bi_flags & BDB_UPD_CONFIG ) { - if ( bdb->bi_db_config ) { - int i; - FILE *f = fopen( bdb->bi_db_config_path, "w" ); - if ( f ) { - for (i=0; bdb->bi_db_config[i].bv_val; i++) - fprintf( f, "%s\n", bdb->bi_db_config[i].bv_val ); - fclose( f ); - } - } else { - unlink( bdb->bi_db_config_path ); - } - bdb->bi_flags ^= BDB_UPD_CONFIG; - } - if ( bdb->bi_flags & BDB_DEL_INDEX ) { bdb_attr_flush( bdb ); bdb->bi_flags ^= BDB_DEL_INDEX; } - + if ( bdb->bi_flags & BDB_RE_OPEN ) { bdb->bi_flags ^= BDB_RE_OPEN; rc = c->be->bd_info->bi_db_close( c->be, &c->reply ); - if ( rc == 0 ) + if ( rc == 0 ) { + if ( bdb->bi_flags & BDB_UPD_CONFIG ) { + if ( bdb->bi_db_config ) { + int i; + FILE *f = fopen( bdb->bi_db_config_path, "w" ); + if ( f ) { + for (i=0; bdb->bi_db_config[i].bv_val; i++) + fprintf( f, "%s\n", bdb->bi_db_config[i].bv_val ); + fclose( f ); + } + } else { + unlink( bdb->bi_db_config_path ); + } + bdb->bi_flags ^= BDB_UPD_CONFIG; + } rc = c->be->bd_info->bi_db_open( c->be, &c->reply ); + } /* If this fails, we need to restart */ if ( rc ) { slapd_shutdown = 2; @@ -556,7 +557,7 @@ bdb_cf_gen( ConfigArgs *c ) for (; bdb->bi_db_config[i].bv_val; i++) bdb->bi_db_config[i] = bdb->bi_db_config[i+1]; } - bdb->bi_flags |= BDB_UPD_CONFIG; + bdb->bi_flags |= BDB_UPD_CONFIG|BDB_RE_OPEN; c->cleanup = bdb_cf_cleanup; break; /* Doesn't really make sense to change these on the fly; @@ -758,7 +759,7 @@ bdb_cf_gen( ConfigArgs *c ) } if ( bdb->bi_flags & BDB_IS_OPEN ) { - bdb->bi_flags |= BDB_UPD_CONFIG; + bdb->bi_flags |= BDB_UPD_CONFIG|BDB_RE_OPEN; c->cleanup = bdb_cf_cleanup; } else { /* If we're just starting up...