From 3110c2206f3eda5a09b23fffe96dfab9aad40aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Sat, 23 Nov 2024 01:12:55 +0300 Subject: [PATCH] =?UTF-8?q?mdbx:=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ChangeLog.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChangeLog.md | 63 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index aca30385..6f3b662d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -9,28 +9,6 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов. -Исправления: - - - Функция `mdbx_close_dbi()` доработана для возврата ошибки `MDBX_DANGLING_DBI` - при попытке закрыть dbi-дескриптор таблицы, созданной и/или измененной в - ещё выполняющейся транзакции. Такое преждевременное закрытие дескриптора - является неверным использованием API и нарушением контракта/предусловий - сформулированных в описании `mdbx_close_dbi()`. Однако, вместо возврата - ошибки выполнялось некорректное закрытие дескриптора, что могло - приводить к созданию таблицы с пустым именем, утечки страниц БД и/или - нарушению структуры b-tree (неверной ссылкой на корень таблицы). - - - Исправлено открытие таблицы с пустым/нулевым именем, в том числе устранена - возможность `SIGSEGV` при закрытии её дескриптора. - - - Добавлены упущенные inline-реализации `mdbx::cursor::upper_bound()` и `mdbx::cursor::upper_bound_multivalue()`. - - Продолжена корректировка описания С++ API для использования термина "таблица" вместо "sub-database". - - Исправлено проверяемое условие внутри `assert()` в пути обработки `MDBX_GET/NEXT/PREV_MULTIPLE`. - - На 32-битных платформах разрешено использовть 4-байтное выравнивание при получении 64-битных значений посредством `MDBX_MULTIPLE`. - - Добавлен костыль для устранения проблем из-за некорректной обработки `[[gnu::pure]]` в Apple Clang. - - Поправлено определение `MDBX_DEPRECATED_ENUM` для старых компиляторов при включении С++11. - - Доработано использование `std::experimental::filesystem`. - Новое: - Ускорено обновление GC при возврате/помещении списков страниц в @@ -41,14 +19,47 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic фиксации транзакций (с возвратом ошибки `MDBX_PROBLEM`) в редких специфических условиях. Подробности см. в описании коммита [`6c56ed97bbd8ca46abac61886a113ba31e5f1291`](https://gitflic.ru/project/erthink/libmdbx/commit/6c56ed97bbd8ca46abac61886a113ba31e5f1291). - - - Добавлен метод `mdbx::cursor::get_multiple_samelength()` и переименован `mdbx::txn::put_multiple_samelength()`. - - Для единообразия C++ API при выполнении операции `MDBX_GET_MULTIPLE` теперь также возвращается значение самого ключа. - - Для размерных констант `mdbx::env::geometry` базовый тип изменен с беззнакового `size_t` на знаковый `intptr_t`. - Включен стандарт `C23` в CMake-скриптах сборки. - Добавлены T-макросы для парных `char`/`wchar_t` функций. - Поддержка вложенных пишущих транзакций в C++ API. - Экспорт информации о версии в `VERSION.json`. + - Добавлена поддержка переменной среды `SOURCE_DATE_EPOCH` для воспроизводимости сборок. + Прежний способ посредством `MDBX_BUILD_TIMESTAMP` также работает и имеет приоритет. + - Добавлена возможность указывать дополнительную информацию о сборке libmdbx через опцию `MDBX_BUILD_METADATA`. + Сейчас задаваемая информация просто включается внутрь библиотеки в качестве значения `mdbx_build.metadata`, + а в дальнейшем также будет использоваться при формировании пакетов и т.п. + +Изменение поведения: + + - Добавлен метод `mdbx::cursor::get_multiple_samelength()` и переименован `mdbx::txn::put_multiple_samelength()`. + - Для единообразия C++ API при выполнении операции `MDBX_GET_MULTIPLE` теперь также возвращается значение самого ключа. + - Для размерных констант `mdbx::env::geometry` базовый тип изменен с беззнакового `size_t` на знаковый `intptr_t`. + - Теперь выбор в пользу использования ntdll вместо CRT делается только при явном отключении C++ API. + - Теперь выполняется освобождение памяти сброшенных/прерванных читающих транзакций передаваемых в `mdbx_txn_commit()`. + Соглашение по API требует чтобы такие транзакции освобождались посредством `mdbx_txn_abort()`, из-за чего + функция `mdbx_txn_commit()` возвращала ошибку в таких случаях, не разрушая сами транзакции. + Это приводило к утечкам памяти из-за ошибок в приложениях, что побудило изменить поведение. + - Использование макроса `__deprecated_enum` если он определен. + +Исправления: + + - Функция `mdbx_close_dbi()` доработана для возврата ошибки `MDBX_DANGLING_DBI` + при попытке закрыть dbi-дескриптор таблицы, созданной и/или измененной в + ещё выполняющейся транзакции. Такое преждевременное закрытие дескриптора + является неверным использованием API и нарушением контракта/предусловий + сформулированных в описании `mdbx_close_dbi()`. Однако, вместо возврата + ошибки выполнялось некорректное закрытие дескриптора, что могло + приводить к созданию таблицы с пустым именем, утечки страниц БД и/или + нарушению структуры b-tree (неверной ссылкой на корень таблицы). + - Исправлено открытие таблицы с пустым/нулевым именем, в том числе устранена + возможность `SIGSEGV` при закрытии её дескриптора. + - Добавлены упущенные inline-реализации `mdbx::cursor::upper_bound()` и `mdbx::cursor::upper_bound_multivalue()`. + - Продолжена корректировка описания С++ API для использования термина "таблица" вместо "sub-database". + - Исправлено проверяемое условие внутри `assert()` в пути обработки `MDBX_GET/NEXT/PREV_MULTIPLE`. + - На 32-битных платформах разрешено использовать 4-байтное выравнивание при получении 64-битных значений посредством `MDBX_MULTIPLE`. + - Добавлен костыль для устранения проблем из-за некорректной обработки `[[gnu::pure]]` в Apple Clang и MSVC. + - Поправлено определение `MDBX_DEPRECATED_ENUM` для старых компиляторов при включении С++11. + - Доработано использование `std::experimental::filesystem` для решения проблем со сборкой в старых компиляторах. Мелочи: