ITS#7515 Reject conflicting page versions.

If mdb_page_touch() sees a page in txn's dirty_list, that
is the page version txn's cursors should have.  Fail if
the user may be seeing and depending on another version.
vmware
Hallvard Furuseth 12 years ago
parent be47ca7667
commit a77767013a
  1. 7
      libraries/liblmdb/mdb.c

@ -1560,9 +1560,10 @@ mdb_page_touch(MDB_cursor *mc)
if (dl[0].mid) { if (dl[0].mid) {
unsigned x = mdb_mid2l_search(dl, pgno); unsigned x = mdb_mid2l_search(dl, pgno);
if (x <= dl[0].mid && dl[x].mid == pgno) { if (x <= dl[0].mid && dl[x].mid == pgno) {
np = dl[x].mptr; if (mp != dl[x].mptr) { /* bad cursor? */
if (mp != np) mc->mc_flags &= ~(C_INITIALIZED|C_EOF);
mc->mc_pg[mc->mc_top] = np; return MDB_CORRUPTED;
}
return 0; return 0;
} }
} }

Loading…
Cancel
Save