libmdbx 0.13.6 "Бузина"

Леонид Юрьев обновлён 2 недели назад v0.13.6 a971c76 Релиз
1
Описание

Поддерживающий выпуск стабильной ветки с исправлением обнаруженных ошибок и устранением недочётов, в память о погибшем украинском историке и писателе Алесе Бузине.

For translation to other languages please try Yandex or liar Google.

git diff' stat: 15 files changed, 194 insertions(+), 36 deletions(-)

Благодарности:

Исправления:

  • Устранён регресс при использовании курсоров для DBI=0 (aka GC/FreeDB) в читающих транзакциях.
    После рефакторинга и ряда оптимизаций для завершения/гашения курсоров в читающих и пишущих транзакций, стал использоваться общий код. Причем за основу, был взят соответствующий фрагмент относящийся к пишущим транзакциям, в которых пользователю не позволяется использоваться курсоры для DBI=0 и поэтому эта итераций пропускалась.
    В результате, при завершении читающих транзакциях, курсоры связанные с DBI=0 не завершались должным образом, а при их повторном использовании или явном закрытии после завершения читающей транзакции происходило обращение к уже освобожденной памяти. Если же такие курсоры отсоединялись или закрывались до завершения читающей транзакции, то ошибка не имела шансов на проявление.
  • Устранён регресс в виде ошибки EAGAIN при копировании БД на NFS и CIFS/SMB.
    При доработках/развитии API в функции копирования был добавлен захват файловой блокировки посредством как fcntl(), так и flock(). Однако, в зависимости от версии локального ядра, версии удалённого сервера NFS и опций монтирования, это могло приводить к возврату POSIX-ошибки EAGAIN (11 на большинстве платформ, включая Linux).
  • Устранена ошибка merge/rebase внутри mdbx_txn_release_all_cursors_ex(), что могло приводить к последующим неожиданным ошибкам MDBX_EBADSIGN и утечкам памяти. Для проверки сценария дополнен соответствующий тест.
  • Исправлена assert-проверка в пути завершения вложенных транзакций. Для проверки сценария дополнен соответствующий тест.
  • Устранена возможность возврата неожиданной ошибки MDBX_BUSY из mdbx_txn_lock(d_wait=false).
  • Для совместимости с GCC 15.x в режиме C23 изменен порядок указания атрибутов функций.

Изменение поведения:

  • При невозможности отвязки курсора от его текущей транзакции функция mdbx_cursor_bind() теперь возвращает MDBX_EINVAL вместо MDBX_BAD_TXN.

Прочие доработки:

  • Во избежание потенциальных проблем отключено использование copy_file_range() на ядрах Linux 5.3 - 5.18.
  • Вброс std::invalid_argument теперь производится явным сообщением MDBX_EINVAL.
  • Уточнен тип адреса для пожертвований. Ethereum/ERC-20 позволяет перечислять не только ETH, но и другие валюты/токены, в том числе USDC.
  • Дополнен тест курсоров extra/cursor-closing.
  • В NOTICE обновлена информация о Github.

Загрузки:


За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.