From 85ae5011e722ef5b7cc74de9d686c88f8c5268a9 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@symas.com>
Date: Sun, 26 Aug 2012 11:05:45 -0700
Subject: [PATCH] Fix mdb_audit()

due to a0993354a603a970889ad5c160c289ecca316f81
---
 libraries/libmdb/mdb.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c
index f8211c6019..67ffff35cf 100644
--- a/libraries/libmdb/mdb.c
+++ b/libraries/libmdb/mdb.c
@@ -1107,17 +1107,18 @@ static void mdb_audit(MDB_txn *txn)
 	mdb_cursor_init(&mc, txn, FREE_DBI, NULL);
 	while ((rc = mdb_cursor_get(&mc, &key, &data, MDB_NEXT)) == 0)
 		freecount += *(MDB_ID *)data.mv_data;
-	freecount += txn->mt_dbs[0].md_branch_pages + txn->mt_dbs[0].md_leaf_pages +
-		txn->mt_dbs[0].md_overflow_pages;
 
 	count = 0;
 	for (i = 0; i<txn->mt_numdbs; i++) {
+		MDB_xcursor mx, *mxp;
+		mxp = (txn->mt_dbs[i].md_flags & MDB_DUPSORT) ? &mx : NULL;
+		mdb_cursor_init(&mc, txn, i, mxp);
+		if (txn->mt_dbs[i].md_root == P_INVALID)
+			continue;
 		count += txn->mt_dbs[i].md_branch_pages +
 			txn->mt_dbs[i].md_leaf_pages +
 			txn->mt_dbs[i].md_overflow_pages;
 		if (txn->mt_dbs[i].md_flags & MDB_DUPSORT) {
-			MDB_xcursor mx;
-			mdb_cursor_init(&mc, txn, i, &mx);
 			mdb_page_search(&mc, NULL, 0);
 			do {
 				unsigned j;
@@ -1136,7 +1137,7 @@ static void mdb_audit(MDB_txn *txn)
 			while (mdb_cursor_sibling(&mc, 1) == 0);
 		}
 	}
-	assert(freecount + count + 2 >= txn->mt_next_pgno - 1);
+	assert(freecount + count + 2 /* metapages */ == txn->mt_next_pgno);
 }
 #endif
 
-- 
GitLab