MDB_VL32 plug rpage leak

mdb_cursor_set wasn't unref'ing as intended.
ntdll
Howard Chu 8 years ago
parent 77d522d151
commit 7e2290c52b
  1. 9
      libraries/liblmdb/mdb.c

@ -6620,8 +6620,10 @@ mdb_cursor_set(MDB_cursor *mc, MDB_val *key, MDB_val *data,
if (key->mv_size == 0) if (key->mv_size == 0)
return MDB_BAD_VALSIZE; return MDB_BAD_VALSIZE;
if (mc->mc_xcursor) if (mc->mc_xcursor) {
MDB_CURSOR_UNREF(&mc->mc_xcursor->mx_cursor, 0);
mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF);
}
/* See if we're already on the right page */ /* See if we're already on the right page */
if (mc->mc_flags & C_INITIALIZED) { if (mc->mc_flags & C_INITIALIZED) {
@ -6753,8 +6755,6 @@ set1:
return MDB_SUCCESS; return MDB_SUCCESS;
} }
if (mc->mc_xcursor)
MDB_CURSOR_UNREF(&mc->mc_xcursor->mx_cursor, 0);
if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (F_ISSET(leaf->mn_flags, F_DUPDATA)) {
mdb_xcursor_init1(mc, leaf); mdb_xcursor_init1(mc, leaf);
} }
@ -8303,6 +8303,9 @@ mdb_cursor_count(MDB_cursor *mc, mdb_size_t *countp)
void void
mdb_cursor_close(MDB_cursor *mc) mdb_cursor_close(MDB_cursor *mc)
{ {
if (mc) {
MDB_CURSOR_UNREF(mc, 0);
}
if (mc && !mc->mc_backup) { if (mc && !mc->mc_backup) {
/* remove from txn, if tracked */ /* remove from txn, if tracked */
if ((mc->mc_flags & C_UNTRACK) && mc->mc_txn->mt_cursors) { if ((mc->mc_flags & C_UNTRACK) && mc->mc_txn->mt_cursors) {

Loading…
Cancel
Save