Merge remote-tracking branch 'origin/mdb.master'

This commit is contained in:
Howard Chu 2012-07-22 17:58:39 -07:00
commit 832f7de6ae

View file

@ -4247,8 +4247,11 @@ mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data,
MDB_val k2;
rc = mdb_cursor_last(mc, &k2, &d2);
if (rc == 0) {
rc = MDB_NOTFOUND;
mc->mc_ki[mc->mc_top]++;
rc = mc->mc_dbx->md_cmp(key, &k2);
if (rc) {
rc = MDB_NOTFOUND;
mc->mc_ki[mc->mc_top]++;
}
}
} else {
rc = mdb_cursor_set(mc, key, &d2, MDB_SET, &exact);
@ -4318,6 +4321,7 @@ more:
if (mc->mc_db->md_flags & MDB_DUPFIXED) {
fp->mp_flags |= P_LEAF2;
fp->mp_pad = data->mv_size;
fp->mp_upper += 2 * data->mv_size; /* leave space for 2 more */
} else {
fp->mp_upper += 2 * sizeof(indx_t) + 2 * NODESIZE +
(dkey.mv_size & 1) + (data->mv_size & 1);
@ -4338,6 +4342,7 @@ more:
fp = NODEDATA(leaf);
if (flags == MDB_CURRENT) {
reuse:
fp->mp_flags |= P_DIRTY;
COPY_PGNO(fp->mp_pgno, mc->mc_pg[mc->mc_top]->mp_pgno);
mc->mc_xcursor->mx_cursor.mc_pg[0] = fp;
@ -4346,6 +4351,9 @@ more:
}
if (mc->mc_db->md_flags & MDB_DUPFIXED) {
offset = fp->mp_pad;
if (SIZELEFT(fp) >= offset)
goto reuse;
offset *= 4; /* space for 4 more */
} else {
offset = NODESIZE + sizeof(indx_t) + data->mv_size;
}