ITS#7455 don't give up so soon

If we're operating on the freelist, see if our current pghead
can satisfy the request before giving up and using new pages.
vmware
Howard Chu 12 years ago
parent 057e068630
commit 2a36346b50
  1. 13
      libraries/liblmdb/mdb.c

@ -1338,7 +1338,7 @@ none:
MDB_oldpages *mop = txn->mt_env->me_pghead;
if (num > 1) {
MDB_cursor m2;
int retry = 60, readit = 0, n2 = num-1;
int retry = 500, readit = 0, n2 = num-1;
unsigned int i, j, k;
/* If current list is too short, must fetch more and coalesce */
@ -1347,11 +1347,14 @@ none:
mdb_cursor_init(&m2, txn, FREE_DBI, NULL);
do {
/* bail out if we're operating on the freelist.
/* If on freelist, don't try to read more. If what we have
* right now isn't enough just use new pages.
* TODO: get all of this working. Many circular dependencies...
*/
if (mc->mc_dbi == FREE_DBI)
break;
if (mc->mc_dbi == FREE_DBI) {
retry = 0;
readit = 0;
}
if (readit) {
MDB_val key, data;
MDB_oldpages *mop2;
@ -2124,7 +2127,7 @@ mdb_txn_commit(MDB_txn *txn)
mdb_cursor_init(&mc, txn, FREE_DBI, NULL);
/* should only be one record now */
if (env->me_pghead) {
if (env->me_pghead || env->me_pgfirst) {
/* make sure first page of freeDB is touched and on freelist */
rc = mdb_page_search(&mc, NULL, MDB_PS_MODIFY);
if (rc && rc != MDB_NOTFOUND) {

Loading…
Cancel
Save