mirror of
https://github.com/isar/libmdbx.git
synced 2025-04-01 02:32:57 +08:00
mdbx: косметический рефакторинг cursor_shadow()
(backport).
This commit is contained in:
parent
b6dcdcf2dc
commit
2b6a768750
40
src/cursor.c
40
src/cursor.c
@ -184,14 +184,13 @@ __hot int cursor_touch(MDBX_cursor *const mc, const MDBX_val *key, const MDBX_va
|
|||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
int cursor_shadow(MDBX_cursor *parent_cursor, MDBX_txn *nested_txn, const size_t dbi) {
|
int cursor_shadow(MDBX_cursor *mc, MDBX_txn *nested, const size_t dbi) {
|
||||||
|
tASSERT(nested, dbi > FREE_DBI && dbi < nested->n_dbi);
|
||||||
tASSERT(nested_txn, dbi > FREE_DBI && dbi < nested_txn->n_dbi);
|
const size_t size = mc->subcur ? sizeof(MDBX_cursor) + sizeof(subcur_t) : sizeof(MDBX_cursor);
|
||||||
const size_t size = parent_cursor->subcur ? sizeof(MDBX_cursor) + sizeof(subcur_t) : sizeof(MDBX_cursor);
|
for (MDBX_cursor *bk; mc; mc = bk->next) {
|
||||||
for (MDBX_cursor *bk; parent_cursor; parent_cursor = bk->next) {
|
cASSERT(mc, mc != mc->next);
|
||||||
cASSERT(parent_cursor, parent_cursor != parent_cursor->next);
|
bk = mc;
|
||||||
bk = parent_cursor;
|
if (mc->signature != cur_signature_live)
|
||||||
if (parent_cursor->signature != cur_signature_live)
|
|
||||||
continue;
|
continue;
|
||||||
bk = osal_malloc(size);
|
bk = osal_malloc(size);
|
||||||
if (unlikely(!bk))
|
if (unlikely(!bk))
|
||||||
@ -200,22 +199,19 @@ int cursor_shadow(MDBX_cursor *parent_cursor, MDBX_txn *nested_txn, const size_t
|
|||||||
memset(bk, 0xCD, size);
|
memset(bk, 0xCD, size);
|
||||||
VALGRIND_MAKE_MEM_UNDEFINED(bk, size);
|
VALGRIND_MAKE_MEM_UNDEFINED(bk, size);
|
||||||
#endif /* MDBX_DEBUG */
|
#endif /* MDBX_DEBUG */
|
||||||
*bk = *parent_cursor;
|
*bk = *mc;
|
||||||
parent_cursor->backup = bk;
|
mc->backup = bk;
|
||||||
/* Kill pointers into src to reduce abuse: The
|
mc->txn = nested;
|
||||||
* user may not use mc until dst ends. But we need a valid
|
mc->tree = &nested->dbs[dbi];
|
||||||
* txn pointer here for cursor fixups to keep working. */
|
mc->dbi_state = &nested->dbi_state[dbi];
|
||||||
parent_cursor->txn = nested_txn;
|
subcur_t *mx = mc->subcur;
|
||||||
parent_cursor->tree = &nested_txn->dbs[dbi];
|
if (mx) {
|
||||||
parent_cursor->dbi_state = &nested_txn->dbi_state[dbi];
|
|
||||||
subcur_t *mx = parent_cursor->subcur;
|
|
||||||
if (mx != nullptr) {
|
|
||||||
*(subcur_t *)(bk + 1) = *mx;
|
*(subcur_t *)(bk + 1) = *mx;
|
||||||
mx->cursor.txn = nested_txn;
|
mx->cursor.txn = nested;
|
||||||
mx->cursor.dbi_state = parent_cursor->dbi_state;
|
mx->cursor.dbi_state = &nested->dbi_state[dbi];
|
||||||
}
|
}
|
||||||
parent_cursor->next = nested_txn->cursors[dbi];
|
mc->next = nested->cursors[dbi];
|
||||||
nested_txn->cursors[dbi] = parent_cursor;
|
nested->cursors[dbi] = mc;
|
||||||
}
|
}
|
||||||
return MDBX_SUCCESS;
|
return MDBX_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -293,7 +293,7 @@ MDBX_NOTHROW_PURE_FUNCTION static inline bool check_leaf_type(const MDBX_cursor
|
|||||||
}
|
}
|
||||||
|
|
||||||
MDBX_INTERNAL void cursor_eot(MDBX_cursor *mc, const bool merge);
|
MDBX_INTERNAL void cursor_eot(MDBX_cursor *mc, const bool merge);
|
||||||
MDBX_INTERNAL int cursor_shadow(MDBX_cursor *parent_cursor, MDBX_txn *nested_txn, const size_t dbi);
|
MDBX_INTERNAL int cursor_shadow(MDBX_cursor *mc, MDBX_txn *nested, const size_t dbi);
|
||||||
|
|
||||||
MDBX_INTERNAL MDBX_cursor *cursor_cpstk(const MDBX_cursor *csrc, MDBX_cursor *cdst);
|
MDBX_INTERNAL MDBX_cursor *cursor_cpstk(const MDBX_cursor *csrc, MDBX_cursor *cdst);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user