mdbx: устранение возможности SIGSEGV внутри coherency_check() (backport).

Падение происходило в случае когда:

 - Некоторый процесс увеличивал размер БД с изменением геометрии (с
   увеличением предельного размера БД и её отображения в ОЗУ), затем
   задействовал страницу из добавленного сегмента в качестве корневой для
   FreeDB/GC и/или MainDB и фиксировал транзакцию.

 - Другой процесс, уже работавший с БД до изменения геометрии первым
   процессом, запускал транзакцию чтения. Падение происходило при проверке
   «когерентности» отображения страниц БД в ОЗУ, при проверке отметок
   модификации внутри корневых страниц, так как в этом случае они были вне
   границ текущего отображения БД в адресном пространстве этого процесса.

 Похоже что в ходе какого-то рефакторинга потерялась соответствующая
 проверка. Этот коммит добавляет такую проверку.
This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2024-08-07 21:22:57 +03:00
parent cf6d441e1b
commit 497aabcb2e
2 changed files with 10 additions and 2 deletions

View File

@@ -16,6 +16,10 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
к падению **отладочных сборок**, так как в них соответствующий массив
намеренно заполнен некорректными указателями.
- Устранение возможности `SIGSEGV` внутри `coherency_check()` после
изменения геометрии другим процессом с увеличением верхнего размера БД
и увеличением БД больше предыдущего лимита.
--------------------------------------------------------------------------------