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 );
 
        /* 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.
                 */