mdbx: исправление критической ошибки в TXN_FOREACH_DBI_FROM.

Какие-либо выпуски и стабильные ветки не были затронуты проблемой.
Ошибка была внесена 2023-11-05 коммитом e6af7d7c53 в ветку `devel`.

Большое спасибо команде Erigon и особенно Алексею Шарову за помощь в поиске причины проблемы.
This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2024-04-03 12:51:15 +03:00
parent bdff60e6a7
commit d603de4a87

View File

@ -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; \
I < TXN->mt_numdbs; ++I) \
if (bitmap_item == 0) { \
I |= bitmap_chunk - 1; \
I = (I - 1) | (bitmap_chunk - 1); \
bitmap_item = TXN->mt_dbi_sparse[(1 + I) / bitmap_chunk]; \
if (!bitmap_item) \
I += bitmap_chunk; \
continue; \
} else if ((bitmap_item & 1) == 0) { \
size_t bitmap_skip = dbi_bitmap_ctz(txn, bitmap_item); \