From 9d5de25b5b562a30568da240e972c383dd99d0ba Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Mon, 3 Nov 2008 13:00:00 +0000 Subject: [PATCH] ITS#5745 long-lived TXNs must be closed before DBs --- servers/slapd/back-bdb/init.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) 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. */ -- 2.39.5