]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/init.c
ITS#4088 force cursors to use same locker
[openldap] / servers / slapd / back-bdb / init.c
index df3221e9fce12c3888188a366dd63239a058612f..36af08c8e5d03e6fe3e42ff3949172c949718b4b 100644 (file)
 #include <ac/stdlib.h>
 #include <ac/errno.h>
 #include <sys/stat.h>
-#ifdef HAVE_UTIME_H
-#  ifdef HAVE_SYS_TYPES_H
-#    include <sys/types.h>
-#  endif
-#  include <utime.h>
-#endif /* HAVE_UTIME_H */
 #include "back-bdb.h"
 #include <lutil.h>
 #include <ldap_rq.h>
@@ -284,6 +278,15 @@ bdb_db_open( BackendDB *be )
                        }
                        /* Prev environment had TXN support, get rid of it */
                        if ( !flags_ok ) {
+                               bdb->bi_dbenv->close( bdb->bi_dbenv, 0 );
+                               bdb->bi_dbenv = NULL;
+                               rc = db_env_create( &bdb->bi_dbenv, 0 );
+                               if( rc != 0 ) {
+                                       Debug( LDAP_DEBUG_ANY,
+                                               "bdb_db_open: db_env_create failed: %s (%d)\n",
+                                               db_strerror(rc), rc, 0 );
+                                       return rc;
+                               }
                                bdb->bi_dbenv->remove( bdb->bi_dbenv, dbhome, 0 );
                                bdb->bi_dbenv = NULL;
                        }
@@ -309,6 +312,10 @@ bdb_db_open( BackendDB *be )
                        open_env = 0;
                } else {
                        /* Create a new env that can take the desired settings */
+                       if ( bdb->bi_dbenv != NULL ) {
+                               bdb->bi_dbenv->close( bdb->bi_dbenv, 0 );
+                               bdb->bi_dbenv = NULL;
+                       }
                        rc = db_env_create( &bdb->bi_dbenv, 0 );
                        if( rc != 0 ) {
                                Debug( LDAP_DEBUG_ANY,