mirror of
https://github.com/isar/libmdbx.git
synced 2025-03-10 19:18:14 +08:00
mdbx: дополнительные проверки сигнатур курсоров при итерации связанных списков (backport).
This commit is contained in:
parent
9277daa185
commit
d313008d82
@ -114,8 +114,12 @@ int mdbx_cursor_unbind(MDBX_cursor *mc) {
|
|||||||
cASSERT(mc, dbi < mc->txn->n_dbi);
|
cASSERT(mc, dbi < mc->txn->n_dbi);
|
||||||
if (dbi < mc->txn->n_dbi) {
|
if (dbi < mc->txn->n_dbi) {
|
||||||
MDBX_cursor **prev = &mc->txn->cursors[dbi];
|
MDBX_cursor **prev = &mc->txn->cursors[dbi];
|
||||||
while (*prev && *prev != mc)
|
while (*prev) {
|
||||||
|
ENSURE(mc->txn->env, (*prev)->signature == cur_signature_live || (*prev)->signature == cur_signature_wait4eot);
|
||||||
|
if (*prev == mc)
|
||||||
|
break;
|
||||||
prev = &(*prev)->next;
|
prev = &(*prev)->next;
|
||||||
|
}
|
||||||
cASSERT(mc, *prev == mc);
|
cASSERT(mc, *prev == mc);
|
||||||
*prev = mc->next;
|
*prev = mc->next;
|
||||||
}
|
}
|
||||||
@ -158,8 +162,12 @@ void mdbx_cursor_close(MDBX_cursor *mc) {
|
|||||||
tASSERT(txn, dbi < txn->n_dbi);
|
tASSERT(txn, dbi < txn->n_dbi);
|
||||||
if (dbi < txn->n_dbi) {
|
if (dbi < txn->n_dbi) {
|
||||||
MDBX_cursor **prev = &txn->cursors[dbi];
|
MDBX_cursor **prev = &txn->cursors[dbi];
|
||||||
while (*prev && *prev != mc)
|
while (*prev) {
|
||||||
|
ENSURE(txn->env, (*prev)->signature == cur_signature_live || (*prev)->signature == cur_signature_wait4eot);
|
||||||
|
if (*prev == mc)
|
||||||
|
break;
|
||||||
prev = &(*prev)->next;
|
prev = &(*prev)->next;
|
||||||
|
}
|
||||||
tASSERT(txn, *prev == mc);
|
tASSERT(txn, *prev == mc);
|
||||||
*prev = mc->next;
|
*prev = mc->next;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user