From: Howard Chu Date: Mon, 3 Nov 2008 13:00:00 +0000 (+0000) Subject: ITS#5745 long-lived TXNs must be closed before DBs X-Git-Tag: ACLCHECK_0~1157 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=9d5de25b5b562a30568da240e972c383dd99d0ba;p=openldap ITS#5745 long-lived TXNs must be closed before DBs --- diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c index 5de029303b..a0bfcc16fa 100644 --- a/servers/slapd/back-bdb/init.c +++ b/servers/slapd/back-bdb/init.c @@ -584,6 +584,17 @@ bdb_db_close( BackendDB *be, ConfigReply *cr ) ber_bvarray_free( bdb->bi_db_config ); bdb->bi_db_config = NULL; + if( bdb->bi_dbenv ) { + /* Free cache locker if we enabled locking. + * TXNs must all be closed before DBs... + */ + if ( !( slapMode & SLAP_TOOL_QUICK ) && bdb->bi_cache.c_txn ) { + TXN_ABORT( bdb->bi_cache.c_txn ); + bdb->bi_cache.c_txn = NULL; + } + bdb_reader_flush( bdb->bi_dbenv ); + } + while( bdb->bi_databases && bdb->bi_ndatabases-- ) { db = bdb->bi_databases[bdb->bi_ndatabases]; rc = db->bdi_db->close( db->bdi_db, 0 ); @@ -614,13 +625,6 @@ bdb_db_close( BackendDB *be, ConfigReply *cr ) /* close db environment */ if( bdb->bi_dbenv ) { - /* Free cache locker if we enabled locking */ - if ( !( slapMode & SLAP_TOOL_QUICK ) && bdb->bi_cache.c_txn ) { - TXN_ABORT( bdb->bi_cache.c_txn ); - bdb->bi_cache.c_txn = NULL; - } - bdb_reader_flush( bdb->bi_dbenv ); - /* force a checkpoint, but not if we were ReadOnly, * and not in Quick mode since there are no transactions there. */