]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-mdb/tools.c
Merge remote-tracking branch 'origin/mdb.RE/0.9'
[openldap] / servers / slapd / back-mdb / tools.c
index c805444063c56a9d95e16cf6576050b403765137..8a70565350dd51dd99adf5639c1ede1e41406636 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2011-2015 The OpenLDAP Foundation.
+ * Copyright 2011-2016 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -198,6 +198,14 @@ int mdb_tool_entry_close(
                mdb_cursor_close( cursor );
                cursor = NULL;
        }
+       {
+               struct mdb_info *mdb = be->be_private;
+               if ( mdb ) {
+                       int i;
+                       for (i=0; i<mdb->mi_nattrs; i++)
+                               mdb->mi_attrs[i]->ai_cursor = NULL;
+               }
+       }
        if( mdb_tool_txn ) {
                int rc;
                if (( rc = mdb_txn_commit( mdb_tool_txn ))) {
@@ -394,7 +402,7 @@ mdb_tool_entry_get_int( BackendDB *be, ID id, Entry **ep )
                        }
                }
        }
-       rc = mdb_entry_decode( &op, mdb_tool_txn, &data, &e );
+       rc = mdb_entry_decode( &op, mdb_tool_txn, &data, id, &e );
        e->e_id = id;
        if ( !BER_BVISNULL( &dn )) {
                e->e_name = dn;
@@ -745,6 +753,7 @@ done:
                        mdb_tool_txn = NULL;
                        idcursor = NULL;
                        if( rc != 0 ) {
+                               mdb->mi_numads = 0;
                                snprintf( text->bv_val, text->bv_len,
                                                "txn_commit failed: %s (%d)",
                                                mdb_strerror(rc), rc );
@@ -1015,6 +1024,7 @@ done:
        if( rc == 0 ) {
                rc = mdb_txn_commit( mdb_tool_txn );
                if( rc != 0 ) {
+                       mdb->mi_numads = 0;
                        snprintf( text->bv_val, text->bv_len,
                                        "txn_commit failed: %s (%d)",
                                        mdb_strerror(rc), rc );