]> git.sur5r.net Git - openldap/commitdiff
Update sub-DBs before updating free list
authorHoward Chu <hyc@symas.com>
Thu, 26 Jul 2012 13:25:31 +0000 (06:25 -0700)
committerHoward Chu <hyc@symas.com>
Thu, 26 Jul 2012 13:25:31 +0000 (06:25 -0700)
libraries/libmdb/mdb.c

index 9ce45b30b81b7f6e712389c3336c1770d3385e8d..b5952da849689405b813a9bb208dc7475ca99ca9 100644 (file)
@@ -1877,6 +1877,23 @@ mdb_txn_commit(MDB_txn *txn)
        DPRINTF("committing txn %zu %p on mdbenv %p, root page %zu",
            txn->mt_txnid, (void *)txn, (void *)env, txn->mt_dbs[MAIN_DBI].md_root);
 
+       /* Update DB root pointers. Their pages have already been
+        * touched so this is all in-place and cannot fail.
+        */
+       {
+               MDB_dbi i;
+               MDB_val data;
+               data.mv_size = sizeof(MDB_db);
+
+               mdb_cursor_init(&mc, txn, MAIN_DBI, NULL);
+               for (i = 2; i < txn->mt_numdbs; i++) {
+                       if (txn->mt_dbflags[i] & DB_DIRTY) {
+                               data.mv_data = &txn->mt_dbs[i];
+                               mdb_cursor_put(&mc, &txn->mt_dbxs[i].md_name, &data, 0);
+                       }
+               }
+       }
+
        mdb_cursor_init(&mc, txn, FREE_DBI, NULL);
 
        /* should only be one record now */
@@ -1997,22 +2014,6 @@ again:
                        env->me_free_pgs = txn->mt_free_pgs;
        }
 
-       /* Update DB root pointers. Their pages have already been
-        * touched so this is all in-place and cannot fail.
-        */
-       {
-               MDB_dbi i;
-               MDB_val data;
-               data.mv_size = sizeof(MDB_db);
-
-               mdb_cursor_init(&mc, txn, MAIN_DBI, NULL);
-               for (i = 2; i < txn->mt_numdbs; i++) {
-                       if (txn->mt_dbflags[i] & DB_DIRTY) {
-                               data.mv_data = &txn->mt_dbs[i];
-                               mdb_cursor_put(&mc, &txn->mt_dbxs[i].md_name, &data, 0);
-                       }
-               }
-       }
 #if MDB_DEBUG > 2
        mdb_audit(txn);
 #endif