mirror of
https://github.com/isar/libmdbx.git
synced 2025-04-03 15:42:58 +08:00
mdbx: устранение регресса при использовании курсоров для DBI=0 в читающих транзакциях (hotfix).
В результате рефакторинга и ряда оптимизаций для завершения/гашения курсоров в читающих и пишущих транзакций стал использоваться общий код. Причем за основу, был взят соответствующий фрагмент относящийся к пишущим транзакциям, в которых пользователю не позволяется использоваться курсоры для DBI=0 и поэтому эта итераций пропускалась. В результате, при завершении читающих транзакциях, курсоры связанные с DBI=0 не завершались должным образом, а при их повторном использовании или явном закрытии после завершения читающей транзакции происходило обращение к уже освобожденной памяти. Если же такие курсоры отсоединялись или закрывались до завершения читающей транзакции, то ошибка не имела шансов на проявление. Спасибо Илье Михееву (https://github.com/JkLondon) и команде Erigon (https://erigon.tech) за сообщения о проблеме.
This commit is contained in:
parent
e3324cef91
commit
b9b14f0061
@ -8,8 +8,7 @@ __hot txnid_t txn_snapshot_oldest(const MDBX_txn *const txn) {
|
||||
}
|
||||
|
||||
void txn_done_cursors(MDBX_txn *txn, const bool merge) {
|
||||
tASSERT(txn, txn->cursors[FREE_DBI] == nullptr);
|
||||
TXN_FOREACH_DBI_FROM(txn, i, /* skip FREE_DBI */ 1) {
|
||||
TXN_FOREACH_DBI_ALL(txn, i) {
|
||||
MDBX_cursor *mc = txn->cursors[i];
|
||||
if (mc) {
|
||||
txn->cursors[i] = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user