mirror of
https://github.com/isar/libmdbx.git
synced 2025-03-03 16:58:14 +08:00
mdbx: исправление критической ошибки в TXN_FOREACH_DBI_FROM
.
Какие-либо выпуски и стабильные ветки не были затронуты проблемой. Ошибка была внесена 2023-11-05 коммитом e6af7d7c53428ca2892bcbf7eec1c2acee06fd44 в ветку `devel`. Большое спасибо команде Erigon и особенно Алексею Шарову за помощь в поиске причины проблемы.
This commit is contained in:
parent
bdff60e6a7
commit
d603de4a87
@ -3924,8 +3924,10 @@ static __inline size_t dbi_bitmap_ctz(const MDBX_txn *txn, intptr_t bmi) {
|
|||||||
bitmap_item = TXN->mt_dbi_sparse[0] >> FROM, I = FROM; \
|
bitmap_item = TXN->mt_dbi_sparse[0] >> FROM, I = FROM; \
|
||||||
I < TXN->mt_numdbs; ++I) \
|
I < TXN->mt_numdbs; ++I) \
|
||||||
if (bitmap_item == 0) { \
|
if (bitmap_item == 0) { \
|
||||||
I |= bitmap_chunk - 1; \
|
I = (I - 1) | (bitmap_chunk - 1); \
|
||||||
bitmap_item = TXN->mt_dbi_sparse[(1 + I) / bitmap_chunk]; \
|
bitmap_item = TXN->mt_dbi_sparse[(1 + I) / bitmap_chunk]; \
|
||||||
|
if (!bitmap_item) \
|
||||||
|
I += bitmap_chunk; \
|
||||||
continue; \
|
continue; \
|
||||||
} else if ((bitmap_item & 1) == 0) { \
|
} else if ((bitmap_item & 1) == 0) { \
|
||||||
size_t bitmap_skip = dbi_bitmap_ctz(txn, bitmap_item); \
|
size_t bitmap_skip = dbi_bitmap_ctz(txn, bitmap_item); \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user