From: Howard Chu Date: Fri, 26 Aug 2011 07:01:16 +0000 (-0700) Subject: Fix free page reclaim and dbs table update X-Git-Tag: OPENLDAP_REL_ENG_2_4_27~148^2~76 X-Git-Url: https://git.sur5r.net/?p=openldap;a=commitdiff_plain;h=13c663f666ac28d7a72cbe644d393fc8d2dd9881 Fix free page reclaim and dbs table update Can re-use free pages 1 txn earlier Must update all dbs tables on txn commit --- diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 14a4c21b27..ad4e903a2e 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -553,7 +553,7 @@ mdb_alloc_page(MDB_txn *txn, MDB_page *parent, unsigned int parent_idx, int num) if (txn->mt_txnid > 2) { - oldest = txn->mt_txnid - 2; + oldest = txn->mt_txnid - 1; if (!txn->mt_env->me_pghead && txn->mt_dbs[FREE_DBI].md_root != P_INVALID) { /* See if there's anything in the free DB */ MDB_pageparent mpp; @@ -1083,16 +1083,12 @@ done: { int toggle = !env->me_db_toggle; - for (i = 2; i < env->me_numdbs; i++) { - if (txn->mt_dbxs[i].md_dirty) { - env->me_dbs[toggle][i] = txn->mt_dbs[i]; - txn->mt_dbxs[i].md_dirty = 0; - } - } - for (i = env->me_numdbs; i < txn->mt_numdbs; i++) { - txn->mt_dbxs[i].md_dirty = 0; - env->me_dbxs[i] = txn->mt_dbxs[i]; + for (i = 2; i < txn->mt_numdbs; i++) env->me_dbs[toggle][i] = txn->mt_dbs[i]; + + for (i = 2; i < txn->mt_numdbs; i++) { + if (txn->mt_dbxs[i].md_dirty) + txn->mt_dbxs[i].md_dirty = 0; } env->me_db_toggle = toggle; env->me_numdbs = txn->mt_numdbs;