From 0c6ade1064f07b643268f0d2cf9e303ee456ce63 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sat, 20 Aug 2011 23:54:52 -0700 Subject: [PATCH] Fix db_close, don't create txn if no DBs were open --- servers/slapd/back-mdb/init.c | 40 ++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/servers/slapd/back-mdb/init.c b/servers/slapd/back-mdb/init.c index 4f8972f762..589c53cc95 100644 --- a/servers/slapd/back-mdb/init.c +++ b/servers/slapd/back-mdb/init.c @@ -265,25 +265,27 @@ mdb_db_close( BackendDB *be, ConfigReply *cr ) #endif if ( mdb->mi_dbenv ) { - rc = mdb_txn_begin( mdb->mi_dbenv, 1, &txn ); - - while( mdb->mi_databases && mdb->mi_ndatabases-- ) { - db = mdb->mi_databases[mdb->mi_ndatabases]; - mdb_close( txn, db->mdi_dbi ); - /* Lower numbered names are not strdup'd */ - if( mdb->mi_ndatabases >= MDB_NDB ) - free( db->mdi_name.bv_val ); - free( db ); - } - mdb_txn_abort( txn ); - - /* force a sync */ - rc = mdb_env_sync( mdb->mi_dbenv, 1 ); - if( rc != 0 ) { - Debug( LDAP_DEBUG_ANY, - "mdb_db_close: database \"%s\": " - "mdb_env_sync failed: %s (%d).\n", - be->be_suffix[0].bv_val, mdb_strerror(rc), rc ); + if ( mdb->mi_ndatabases ) { + rc = mdb_txn_begin( mdb->mi_dbenv, 1, &txn ); + + while( mdb->mi_databases && mdb->mi_ndatabases-- ) { + db = mdb->mi_databases[mdb->mi_ndatabases]; + mdb_close( txn, db->mdi_dbi ); + /* Lower numbered names are not strdup'd */ + if( mdb->mi_ndatabases >= MDB_NDB ) + free( db->mdi_name.bv_val ); + free( db ); + } + mdb_txn_abort( txn ); + + /* force a sync */ + rc = mdb_env_sync( mdb->mi_dbenv, 1 ); + if( rc != 0 ) { + Debug( LDAP_DEBUG_ANY, + "mdb_db_close: database \"%s\": " + "mdb_env_sync failed: %s (%d).\n", + be->be_suffix[0].bv_val, mdb_strerror(rc), rc ); + } } mdb_env_close( mdb->mi_dbenv ); -- 2.47.2