mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-07 07:30:57 -05:00
ITS#7834 Fix MDB_MULTIPLE writing multiple keys.
Update the state before looping, so the key is not duplicated.
Broke in 4c8f57615c (mostly).
This commit is contained in:
parent
d170df58fb
commit
ac158c7e1e
1 changed files with 9 additions and 8 deletions
|
|
@ -6138,7 +6138,7 @@ current:
|
|||
data->mv_data = METADATA(omp);
|
||||
else
|
||||
memcpy(METADATA(omp), data->mv_data, data->mv_size);
|
||||
goto done;
|
||||
return MDB_SUCCESS;
|
||||
}
|
||||
}
|
||||
if ((rc2 = mdb_ovpage_free(mc, omp)) != MDB_SUCCESS)
|
||||
|
|
@ -6154,7 +6154,7 @@ current:
|
|||
memcpy(olddata.mv_data, data->mv_data, data->mv_size);
|
||||
else
|
||||
memcpy(NODEKEY(leaf), key->mv_data, key->mv_size);
|
||||
goto done;
|
||||
return MDB_SUCCESS;
|
||||
}
|
||||
mdb_node_del(mc, 0);
|
||||
}
|
||||
|
|
@ -6252,6 +6252,12 @@ put_sub:
|
|||
/* Increment count unless we just replaced an existing item. */
|
||||
if (insert_data)
|
||||
mc->mc_db->md_entries++;
|
||||
if (!rc && insert_key) {
|
||||
/* If we succeeded and the key didn't exist before,
|
||||
* make sure the cursor is marked valid.
|
||||
*/
|
||||
mc->mc_flags |= C_INITIALIZED;
|
||||
}
|
||||
if (flags & MDB_MULTIPLE) {
|
||||
if (!rc) {
|
||||
next_mult:
|
||||
|
|
@ -6260,17 +6266,12 @@ next_mult:
|
|||
data[1].mv_size = mcount;
|
||||
if (mcount < dcount) {
|
||||
data[0].mv_data = (char *)data[0].mv_data + data[0].mv_size;
|
||||
insert_key = insert_data = 0;
|
||||
goto more;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
done:
|
||||
/* If we succeeded and the key didn't exist before, make sure
|
||||
* the cursor is marked valid.
|
||||
*/
|
||||
if (!rc && insert_key)
|
||||
mc->mc_flags |= C_INITIALIZED;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue