From b81e66861543f56ce5f640dece9488fe552fc0e5 Mon Sep 17 00:00:00 2001 From: "alex.sharov" Date: Mon, 27 Jan 2025 17:33:51 +0700 Subject: [PATCH] save --- mdbxdist/CMakeLists.txt | 16 +++- mdbxdist/ChangeLog.md | 139 +++++++++++++++++++++++++++++++++- mdbxdist/NOTICE | 2 +- mdbxdist/README.md | 27 ++++--- mdbxdist/cmake/compiler.cmake | 2 +- mdbxdist/cmake/profile.cmake | 2 +- mdbxdist/cmake/utils.cmake | 2 +- mdbxdist/man1/mdbx_chk.1 | 2 +- mdbxdist/man1/mdbx_copy.1 | 2 +- mdbxdist/man1/mdbx_drop.1 | 2 +- mdbxdist/man1/mdbx_dump.1 | 2 +- mdbxdist/man1/mdbx_load.1 | 2 +- mdbxdist/man1/mdbx_stat.1 | 2 +- mdbxdist/mdbx.c | 129 +++++++++++++++---------------- mdbxdist/mdbx.c++ | 8 +- mdbxdist/mdbx.h | 2 +- mdbxdist/mdbx.h++ | 2 +- mdbxdist/mdbx_chk.c | 8 +- mdbxdist/mdbx_copy.c | 8 +- mdbxdist/mdbx_drop.c | 8 +- mdbxdist/mdbx_dump.c | 8 +- mdbxdist/mdbx_load.c | 8 +- mdbxdist/mdbx_stat.c | 8 +- 23 files changed, 270 insertions(+), 121 deletions(-) diff --git a/mdbxdist/CMakeLists.txt b/mdbxdist/CMakeLists.txt index 8f8d1b0..7d0e3f4 100644 --- a/mdbxdist/CMakeLists.txt +++ b/mdbxdist/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2024 Леонид Юрьев aka Leonid Yuriev ############################################### +# Copyright (c) 2020-2025 Леонид Юрьев aka Leonid Yuriev ############################################### # SPDX-License-Identifier: Apache-2.0 # # Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`. Всё будет хорошо! @@ -213,6 +213,20 @@ if(DEFINED PROJECT_NAME AND NOT MDBX_FORCE_BUILD_AS_MAIN_PROJECT) else() set(SUBPROJECT OFF) set(NOT_SUBPROJECT ON) + + # Setup Apple stuff which should be set prior to the first project() or enable_language() + if(APPLE) + # Enable universal binaries for macOS (target arm64 and x86_64) + if(NOT DEFINED CMAKE_OSX_ARCHITECTURES) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64") + endif() + + # Set the minimum macOS deployment target if not already defined + if(NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) + set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0") + endif() + endif() + project(libmdbx C) if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING) set(BUILD_TESTING ON) diff --git a/mdbxdist/ChangeLog.md b/mdbxdist/ChangeLog.md index e5697af..e0b5651 100644 --- a/mdbxdist/ChangeLog.md +++ b/mdbxdist/ChangeLog.md @@ -4,6 +4,36 @@ ChangeLog English version [by liar Google](https://libmdbx-dqdkfa-ru.translate.goog/md__change_log.html?_x_tr_sl=ru&_x_tr_tl=en) and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/libmdbx.dqdkfa.ru/md__change_log.html). +## v0.13.4 "Sigma Boy" запланирован на 2025-02-14 + +Поддерживающий выпуск стабильной ветки с исправлением обнаруженных ошибок и устранением недочётов. + +Благодарности: + + - [Алексею Костюку (aka Keller)](https://t.me/keller18306) за сообщения об ошибках и недочетах. + - [Erigon](https://docs.erigon.tech/) за спонсорство. + - [Alain Picard](https://github.com/castortech) for support [Java bindings](https://github.com/castortech/mdbxjni) and MacOS universal binaries patch for CMake build scenario. + - [Alex Sharov](https://github.com/AskAlexSharov) за сообщение об ошибках и тестирование. + +Новое: + + - Поддержка MacOS universal binaries при сборке посредством CMake. + +Исправления: + + - Устранён регресс допускающий SIGSEGV в операциях обновления после вытеснения/spilling страниц в больших транзакциях. + Ошибка присутствует в выпусках v0.13.1, v0.13.2, v0.13.3 и оставалась незамеченной из-за специфических условий и низкой вероятности проявления. + Более подробная информация в описании коммита `a060057e480aa5196c7d5c00ea441c962e3b952d`. + + - Исправлена опечатка в документации в упоминании `mdbx_env_resurrect_after_fork()`. + + - Исправлена опечатка в условном операторе внутри `cursor_touch()`. + При переделке курсоров было пропущено отрицание в условии, при оценке кол-ва страниц, которые могут потребоваться для выполнения операции. + В текущем понимании ошибка не приводила к каким-либо проблемам, ибо оценка делает по верхней границе с существенным запасом, а в худшем + случае это могло приводить к прерыванию транзакции из-за достижения ограничения на кол-во грязных страниц. + +-------------------------------------------------------------------------------- + ## v0.13.3 "Королёв" от 2025-01-12 Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов @@ -501,6 +531,113 @@ Signed-off-by: Леонид Юрьев (Leonid Yuriev) -------------------------------------------------------------------------------- +## v0.12.12 "Доллежаль" от 2024-10-27 + +Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов, +в память о советском ученом-энергетике Николае Антоновиче Доллежаль в день 125-летия со дня его рождения. + +Это последний выпуск куста стабильных версий 0.12.x, спустя более двух +лет после выпуска 0.12.1. Последующие выпуски 0.12.x будут формироваться +только в случае существенных проблем/ошибок, вероятность чего близка к +нулю. Для всех проектов находящихся в стадии активной разраборки +рекомендуется использовать ветку `master`. + +``` +git diff' stat: x commits, y files changed, z insertions(+), zz deletions(-) +Signed-off-by: Леонид Юрьев (Leonid Yuriev) +``` + +Значимые исправления: + + - Исправление упущенного `TXN_END_EOTDONE` при сбое старта читающей транзакции. + Упомянутый флажок отсутствовал в пути разрушения транзакции при ошибке + её запуска. Из-за чего делалась попытка разрушить курсоры, что приводило + к падению **отладочных сборок**, так как в них соответствующий массив + намеренно заполнен некорректными указателями. + + - Устранение возможности `SIGSEGV` внутри `coherency_check()` после + изменения геометрии другим процессом с увеличением верхнего размера БД + и увеличением БД больше предыдущего лимита. + + - Доработка `mdbx_close_dbi()` для возврата ошибки при попытке закрыть + dbi-дескриптор таблицы, созданной и/или измененной в ещё выполняющейся + транзакции. Такое преждевременное закрытие дескриптора является неверным + использованием API и нарушением контракта/предусловий сформулированных + в описании `mdbx_close_dbi()`. Однако, вместо возврата ошибки + выполнялось некорректное закрытие дескриптора, что могло приводить к + созданию таблицы с пустым именем, утечки страниц БД и/или нарушению + структуры b-tree (неверной ссылкой на корень таблицы). + Добавлен соответствующий тест `extra/early_close_dbi`. + +-------------------------------------------------------------------------------- + +## v0.12.11 "Лиза и Соня" от 2024-07-23 + +Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов, +в память об убитых в Крыму девочках 2 и 9 лет. + +Лиза и Соня погибли 23 Июня 2024 на глазах у родителей, в результате +удара по общественному городскому пляжу ракетами ATACMS с кассетными +боеприпасами. Всего пострадало более 150 граждан России, в том числе 27 +детей. Ракеты были выпущенными украинскими бандеровцами/фашистами, но +полетные задания формировались и загружались военными США, а управление +и наведение ATACAMS невозможно без использования орбитальной группировки +военных спутников США. + +``` +git diff' stat: 29 commits, 14 files changed, 379 insertions(+), 151 deletions(-) +Signed-off-by: Леонид Юрьев (Leonid Yuriev) +``` + +Значимые исправления: + + - Исправление для ОС Windows нарезки `FILE_SEGMENT_ELEMENT`. + Похоже что был потерян коммит входе работы над оптимизацией пути записи + на диск в ОС Windows. В текущем понимании, вероятность проявления ошибки + достаточно низкая, так как выявлена она была синтетическими тестами в + ходе других доработок, а соответствующих сообщений/жалоб не поступало. К + повреждению БД ошибка не приводила, так как сбой происходил до записи + данных с возвратом `ERROR_INVALID_PARAMETER` из системного вызова, т.е. + либо ошибка не проявлялась, либо транзакция не фиксировалась. + + - Устранение вероятности `SIGSEGV` при включении логирования + уровня `MDBX_LOG_TRACE` в отладочных сборках. + + - Исправление генерации исключения `key_exists` в C++ API. + + - Исправление опечаток в документации и README. + + - Исправление обработки курсоров, открытых в родительских транзакциях и + закрытых до завершения вложенных транзакций. В описанной ситуации + закрытые курсоры "воскрешались", что приводило к утечке памяти + выделенной под такие курсоры. + + - Костыль для MSVC ARM/ARM64 для предотвращения ICE (Internal Compiler Error). + + - Устранение `MDBX_EINVAL` для случая вызова `mdbx_env_remove(".")`. + + - Исправление инверсии bool-результата `env::remove()` в C++ API. + + - Исправление опечатки `равно`/`неравно` в условии внутри + `update_gc()`. Существенных последствий ошибки не было, но в + определенных сценариях, сходимость требовала еще одного цикла повтора + внутри update_gc(). + +Прочие доработки: + + - Проверка совместимости флагов GC/FreeDB на случай их изменения в будущих версиях. + - Очистка сообщений `FormatMessageA()` от концевых переводов строк. + - Уточнение макроса `__always_inline` для особо яблочных версий CLANG. + - Использование `\n` вместо `std::endl` в C++ API для разделения строк в кодировщиках данных. + - Проверка дополнительных и пока не используемых полей в meta-страницах. + - Отключение ненужной отладки внутри `txn_merge()`. + - Исправление условий и привязки к версиям компиляторов при формировании макроса `MDBX_DEPRECATED`. + - Больше атрибутов `__cold` для редко-используемых функций (backport). + - Добавление методов `buffer::append_bytes()` и `buffer::clear_and_reserve()`. + - Отключение установки признака фатальной ошибки для не-активной среды при отличии идентификатора процесса. + +-------------------------------------------------------------------------------- + ## v0.12.10 "СЭМ" от 2024-03-12 Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов @@ -2250,7 +2387,7 @@ Deprecated functions and flags: - Rework `MADV_DONTNEED` threshold. - Fix `mdbx_chk` utility for don't checking some numbers if walking on the B-tree was disabled. - Use page's mp_txnid for basic integrity checking. - - Add `MDBX_FORCE_ASSERTIONS` built-time option. + - Add `MDBX_FORCE_ASSERTIONS` build-time option. - Rework `MDBX_DBG_DUMP` to avoid performance degradation. - Rename `MDBX_NOSYNC` to `MDBX_SAFE_NOSYNC` for clarity. - Interpret `ERROR_ACCESS_DENIED` from `OpenProcess()` as 'process exists'. diff --git a/mdbxdist/NOTICE b/mdbxdist/NOTICE index 639c628..4df84db 100644 --- a/mdbxdist/NOTICE +++ b/mdbxdist/NOTICE @@ -11,7 +11,7 @@ to the Telegram' group https://t.me/libmdbx. Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`. Всё будет хорошо! -Copyright 2015-2024 Леонид Юрьев aka Leonid Yuriev +Copyright 2015-2025 Леонид Юрьев aka Leonid Yuriev SPDX-License-Identifier: Apache-2.0 For notes about the license change, credits and acknowledgments, please refer to the COPYRIGHT file within original libmdbx source code diff --git a/mdbxdist/README.md b/mdbxdist/README.md index 1f477fb..cbf281f 100644 --- a/mdbxdist/README.md +++ b/mdbxdist/README.md @@ -4,7 +4,9 @@ > with [`C` API description](https://libmdbx.dqdkfa.ru/group__c__api.html) > and pay attention to the [`C++` API](https://gitflic.ru/project/erthink/libmdbx/blob?file=mdbx.h%2B%2B#line-num-1). -> Questions, feedback and suggestions are welcome to the [Telegram' group](https://t.me/libmdbx). +> Questions, feedback and suggestions are welcome to the [Telegram' group](https://t.me/libmdbx) (archive [1](https://libmdbx.dqdkfa.ru/tg-archive/messages1.html), +> [2](https://libmdbx.dqdkfa.ru/tg-archive/messages2.html), [3](https://libmdbx.dqdkfa.ru/tg-archive/messages3.html), [4](https://libmdbx.dqdkfa.ru/tg-archive/messages4.html), +> [5](https://libmdbx.dqdkfa.ru/tg-archive/messages5.html), [6](https://libmdbx.dqdkfa.ru/tg-archive/messages6.html), [7](https://libmdbx.dqdkfa.ru/tg-archive/messages7.html)). > See the [ChangeLog](https://gitflic.ru/project/erthink/libmdbx/blob?file=ChangeLog.md) for `NEWS` and latest updates. > Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`. @@ -634,19 +636,24 @@ Bindings | Runtime | Repo | Author | | ------- | ------ | ------ | +| Rust | [libmdbx-rs](https://github.com/vorot93/libmdbx-rs) | [Artem Vorotnikov](https://github.com/vorot93) | +| Python | [PyPi/libmdbx](https://pypi.org/project/libmdbx/) | [Lazymio](https://github.com/wtdcode) | +| Java | [mdbxjni](https://github.com/castortech/mdbxjni) | [Castor Technologies](https://castortech.com/) | +| Go | [mdbx-go](https://github.com/torquem-ch/mdbx-go) | [Alex Sharov](https://github.com/AskAlexSharov) | +| Ruby | [ruby-mdbx](https://rubygems.org/gems/mdbx/) | [Mahlon E. Smith](https://github.com/mahlonsmith) | + +##### Obsolete/Outdated/Unsupported: + +| Runtime | Repo | Author | +| ------- | ------ | ------ | +| .NET | [mdbx.NET](https://github.com/wangjia184/mdbx.NET) | [Jerry Wang](https://github.com/wangjia184) | | Scala | [mdbx4s](https://github.com/david-bouyssie/mdbx4s) | [David Bouyssié](https://github.com/david-bouyssie) | +| Rust | [mdbx](https://crates.io/crates/mdbx) | [gcxfd](https://github.com/gcxfd) | | Haskell | [libmdbx-hs](https://hackage.haskell.org/package/libmdbx) | [Francisco Vallarino](https://github.com/fjvallarino) | +| Lua | [lua-libmdbx](https://github.com/mah0x211/lua-libmdbx) | [Masatoshi Fukunaga](https://github.com/mah0x211) | | NodeJS, [Deno](https://deno.land/) | [lmdbx-js](https://github.com/kriszyp/lmdbx-js) | [Kris Zyp](https://github.com/kriszyp/) | NodeJS | [node-mdbx](https://www.npmjs.com/package/node-mdbx/) | [Сергей Федотов](mailto:sergey.fedotov@corp.mail.ru) | -| Ruby | [ruby-mdbx](https://rubygems.org/gems/mdbx/) | [Mahlon E. Smith](https://github.com/mahlonsmith) | -| Go | [mdbx-go](https://github.com/torquem-ch/mdbx-go) | [Alex Sharov](https://github.com/AskAlexSharov) | -| [Nim](https://en.wikipedia.org/wiki/Nim_(programming_language)) | [NimDBX](https://github.com/snej/nimdbx) | [Jens Alfke](https://github.com/snej) -| Lua | [lua-libmdbx](https://github.com/mah0x211/lua-libmdbx) | [Masatoshi Fukunaga](https://github.com/mah0x211) | -| Rust | [libmdbx-rs](https://github.com/vorot93/libmdbx-rs) | [Artem Vorotnikov](https://github.com/vorot93) | -| Rust | [mdbx](https://crates.io/crates/mdbx) | [gcxfd](https://github.com/gcxfd) | -| Java | [mdbxjni](https://github.com/castortech/mdbxjni) | [Castor Technologies](https://castortech.com/) | -| Python | [PyPi/libmdbx](https://pypi.org/project/libmdbx/) | [Lazymio](https://github.com/wtdcode) | -| .NET (obsolete) | [mdbx.NET](https://github.com/wangjia184/mdbx.NET) | [Jerry Wang](https://github.com/wangjia184) | +| Nim | [NimDBX](https://github.com/snej/nimdbx) | [Jens Alfke](https://github.com/snej) diff --git a/mdbxdist/cmake/compiler.cmake b/mdbxdist/cmake/compiler.cmake index 05c067f..5fefdba 100644 --- a/mdbxdist/cmake/compiler.cmake +++ b/mdbxdist/cmake/compiler.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2024 Леонид Юрьев aka Leonid Yuriev ############################################### +# Copyright (c) 2010-2025 Леонид Юрьев aka Leonid Yuriev ############################################### # SPDX-License-Identifier: Apache-2.0 if(CMAKE_VERSION VERSION_LESS 3.8.2) diff --git a/mdbxdist/cmake/profile.cmake b/mdbxdist/cmake/profile.cmake index dc930f3..6a8a466 100644 --- a/mdbxdist/cmake/profile.cmake +++ b/mdbxdist/cmake/profile.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2024 Леонид Юрьев aka Leonid Yuriev ############################################### +# Copyright (c) 2012-2025 Леонид Юрьев aka Leonid Yuriev ############################################### # SPDX-License-Identifier: Apache-2.0 if(CMAKE_VERSION VERSION_LESS 3.8.2) diff --git a/mdbxdist/cmake/utils.cmake b/mdbxdist/cmake/utils.cmake index adb8004..abb4cd3 100644 --- a/mdbxdist/cmake/utils.cmake +++ b/mdbxdist/cmake/utils.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2024 Леонид Юрьев aka Leonid Yuriev ############################################### +# Copyright (c) 2012-2025 Леонид Юрьев aka Leonid Yuriev ############################################### # SPDX-License-Identifier: Apache-2.0 if(CMAKE_VERSION VERSION_LESS 3.8.2) diff --git a/mdbxdist/man1/mdbx_chk.1 b/mdbxdist/man1/mdbx_chk.1 index b53422c..bc6de4b 100644 --- a/mdbxdist/man1/mdbx_chk.1 +++ b/mdbxdist/man1/mdbx_chk.1 @@ -1,4 +1,4 @@ -.\" Copyright 2015-2024 Leonid Yuriev . +.\" Copyright 2015-2025 Leonid Yuriev . .\" Copying restrictions apply. See COPYRIGHT/LICENSE. .TH MDBX_CHK 1 "2024-08-29" "MDBX 0.13" .SH NAME diff --git a/mdbxdist/man1/mdbx_copy.1 b/mdbxdist/man1/mdbx_copy.1 index 16c0fce..83ec855 100644 --- a/mdbxdist/man1/mdbx_copy.1 +++ b/mdbxdist/man1/mdbx_copy.1 @@ -1,4 +1,4 @@ -.\" Copyright 2015-2024 Leonid Yuriev . +.\" Copyright 2015-2025 Leonid Yuriev . .\" Copyright 2015,2016 Peter-Service R&D LLC . .\" Copyright 2012-2015 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. diff --git a/mdbxdist/man1/mdbx_drop.1 b/mdbxdist/man1/mdbx_drop.1 index 3bf5683..a6abbe4 100644 --- a/mdbxdist/man1/mdbx_drop.1 +++ b/mdbxdist/man1/mdbx_drop.1 @@ -1,4 +1,4 @@ -.\" Copyright 2021-2024 Leonid Yuriev . +.\" Copyright 2021-2025 Leonid Yuriev . .\" Copyright 2014-2021 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. .TH MDBX_DROP 1 "2024-08-29" "MDBX 0.13" diff --git a/mdbxdist/man1/mdbx_dump.1 b/mdbxdist/man1/mdbx_dump.1 index 9634205..030617c 100644 --- a/mdbxdist/man1/mdbx_dump.1 +++ b/mdbxdist/man1/mdbx_dump.1 @@ -1,4 +1,4 @@ -.\" Copyright 2015-2024 Leonid Yuriev . +.\" Copyright 2015-2025 Leonid Yuriev . .\" Copyright 2015,2016 Peter-Service R&D LLC . .\" Copyright 2014-2015 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. diff --git a/mdbxdist/man1/mdbx_load.1 b/mdbxdist/man1/mdbx_load.1 index 5e79087..27b533e 100644 --- a/mdbxdist/man1/mdbx_load.1 +++ b/mdbxdist/man1/mdbx_load.1 @@ -1,4 +1,4 @@ -.\" Copyright 2015-2024 Leonid Yuriev . +.\" Copyright 2015-2025 Leonid Yuriev . .\" Copyright 2015,2016 Peter-Service R&D LLC . .\" Copyright 2014-2015 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. diff --git a/mdbxdist/man1/mdbx_stat.1 b/mdbxdist/man1/mdbx_stat.1 index 935a541..68a698c 100644 --- a/mdbxdist/man1/mdbx_stat.1 +++ b/mdbxdist/man1/mdbx_stat.1 @@ -1,4 +1,4 @@ -.\" Copyright 2015-2024 Leonid Yuriev . +.\" Copyright 2015-2025 Leonid Yuriev . .\" Copyright 2015,2016 Peter-Service R&D LLC . .\" Copyright 2012-2015 Howard Chu, Symas Corp. All Rights Reserved. .\" Copying restrictions apply. See COPYRIGHT/LICENSE. diff --git a/mdbxdist/mdbx.c b/mdbxdist/mdbx.c index 63356c6..6bae220 100644 --- a/mdbxdist/mdbx.c +++ b/mdbxdist/mdbx.c @@ -1,10 +1,10 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /* clang-format off */ #define xMDBX_ALLOY 1 /* alloyed build */ -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1664,7 +1664,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */ @@ -6730,7 +6730,7 @@ MDBX_INTERNAL int walk_pages(MDBX_txn *txn, walk_func *visitor, void *user, walk return it; \ } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold size_t mdbx_default_pagesize(void) { size_t pagesize = globals.sys_pagesize; @@ -7273,7 +7273,7 @@ LIBMDBX_API __cold intptr_t mdbx_limits_pgsize_max(void) { return __inline_mdbx_ /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 typedef struct compacting_context { MDBX_env *env; @@ -8133,7 +8133,7 @@ __cold int mdbx_env_copyW(MDBX_env *env, const wchar_t *dest_path, MDBX_copy_fla return LOG_IFERR(rc); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 MDBX_cursor *mdbx_cursor_create(void *context) { cursor_couple_t *couple = osal_calloc(1, sizeof(cursor_couple_t)); @@ -8911,7 +8911,7 @@ __cold int mdbx_cursor_ignord(MDBX_cursor *mc) { return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 int mdbx_dbi_open2(MDBX_txn *txn, const MDBX_val *name, MDBX_db_flags_t flags, MDBX_dbi *dbi) { return LOG_IFERR(dbi_open(txn, name, flags, dbi, nullptr, nullptr)); @@ -9224,7 +9224,7 @@ __cold int mdbx_enumerate_tables(const MDBX_txn *txn, MDBX_table_enum_func *func return LOG_IFERR(rc); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold static intptr_t reasonable_db_maxsize(void) { static intptr_t cached_result; @@ -10653,7 +10653,7 @@ __cold int mdbx_env_stat_ex(const MDBX_env *env, const MDBX_txn *txn, MDBX_stat return LOG_IFERR(rc); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /*------------------------------------------------------------------------------ * Readers API */ @@ -10815,7 +10815,7 @@ int mdbx_txn_unlock(MDBX_env *env) { return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 static inline double key2double(const int64_t key) { union { @@ -11010,7 +11010,7 @@ int64_t mdbx_int64_from_key(const MDBX_val v) { return (int64_t)(unaligned_peek_u64(2, v.iov_base) - UINT64_C(0x8000000000000000)); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold int mdbx_is_readahead_reasonable(size_t volume, intptr_t redundancy) { if (volume <= 1024 * 1024 * 4ul) @@ -11296,7 +11296,7 @@ const char *mdbx_strerror_ANSI2OEM(int errnum) { } #endif /* Bit of madness for Windows */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 static pgno_t env_max_pgno(const MDBX_env *env) { return env->ps ? bytes2pgno(env, env->geo_in_bytes.upper ? env->geo_in_bytes.upper : MAX_MAPSIZE) : PAGELIST_LIMIT; @@ -11869,7 +11869,7 @@ __cold int mdbx_env_get_option(const MDBX_env *env, const MDBX_option_t option, return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 typedef struct diff_result { ptrdiff_t diff; @@ -12234,7 +12234,7 @@ __hot int mdbx_estimate_range(const MDBX_txn *txn, MDBX_dbi dbi, const MDBX_val return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold int mdbx_dbi_dupsort_depthmask(const MDBX_txn *txn, MDBX_dbi dbi, uint32_t *mask) { if (unlikely(!mask)) @@ -12682,7 +12682,7 @@ int mdbx_replace(MDBX_txn *txn, MDBX_dbi dbi, const MDBX_val *key, MDBX_val *new return mdbx_replace_ex(txn, dbi, key, new_data, old_data, flags, default_value_preserver, nullptr); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 #ifdef __SANITIZE_THREAD__ /* LY: avoid tsan-trap by txn, mm_last_pg and geo.first_unallocated */ @@ -13583,7 +13583,7 @@ int mdbx_txn_info(const MDBX_txn *txn, MDBX_txn_info *info, bool scan_rlt) { return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 struct audit_ctx { size_t used; @@ -13690,7 +13690,7 @@ __cold int audit_ex(MDBX_txn *txn, size_t retired_stored, bool dont_filter_gc) { return rc; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 typedef struct MDBX_chk_internal { MDBX_chk_context_t *usr; @@ -15484,7 +15484,7 @@ __cold int mdbx_env_chk(MDBX_env *env, const struct MDBX_chk_callbacks *cb, MDBX return LOG_IFERR(rc); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /*------------------------------------------------------------------------------ * Pack/Unpack 16-bit values for Grow step & Shrink threshold */ @@ -15791,7 +15791,7 @@ uint32_t combine_durability_flags(const uint32_t a, const uint32_t b) { return r; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /* check against https://libmdbx.dqdkfa.ru/dead-github/issues/269 */ static bool coherency_check(const MDBX_env *env, const txnid_t txnid, const volatile tree_t *trees, @@ -15961,7 +15961,7 @@ bool coherency_check_meta(const MDBX_env *env, const volatile meta_t *meta, bool /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold int cursor_check(const MDBX_cursor *mc) { if (!mc->txn->tw.dirtylist) { @@ -16103,7 +16103,7 @@ __hot int cursor_touch(MDBX_cursor *const mc, const MDBX_val *key, const MDBX_va if (!cursor_is_gc(mc)) { need += txn->dbs[FREE_DBI].height + (size_t)3; /* 3) Named DBs also dirty the main DB */ - if (cursor_is_main(mc)) + if (!cursor_is_main(mc)) need += txn->dbs[MAIN_DBI].height + (size_t)3; } #if xMDBX_DEBUG_SPILLING != 2 @@ -16126,7 +16126,7 @@ __hot int cursor_touch(MDBX_cursor *const mc, const MDBX_val *key, const MDBX_va return err; } - if (likely(mc->top >= 0) && !is_modifable(mc->txn, mc->pg[mc->top])) { + if (likely(is_pointed(mc)) && ((mc->txn->flags & MDBX_TXN_SPILLS) || !is_modifable(mc->txn, mc->pg[mc->top]))) { const int8_t top = mc->top; mc->top = 0; do { @@ -18302,7 +18302,7 @@ __hot int cursor_ops(MDBX_cursor *mc, MDBX_val *key, MDBX_val *data, const MDBX_ } } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 #if MDBX_ENABLE_DBI_SPARSE size_t dbi_bitmap_ctz_fallback(const MDBX_txn *txn, intptr_t bmi) { @@ -18998,7 +18998,7 @@ __cold const tree_t *dbi_dig(const MDBX_txn *txn, const size_t dbi, tree_t *fall int dbi_close_release(MDBX_env *env, MDBX_dbi dbi) { return dbi_defer_release(env, dbi_close_locked(env, dbi)); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 static inline size_t dpl_size2bytes(ptrdiff_t size) { assert(size > CURSOR_STACK_SIZE && (size_t)size <= PAGELIST_LIMIT); @@ -19482,7 +19482,7 @@ void dpl_release_shadows(MDBX_txn *txn) { dpl_clear(dl); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold int dxb_read_header(MDBX_env *env, meta_t *dest, const int lck_exclusive, const mdbx_mode_t mode_bits) { memset(dest, 0, sizeof(meta_t)); @@ -20806,7 +20806,7 @@ int dxb_sync_locked(MDBX_env *env, unsigned flags, meta_t *const pending, troika return rc; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 bool env_txn0_owned(const MDBX_env *env) { return (env->flags & MDBX_NOSTICKYTHREADS) ? (env->basal_txn->owner != 0) @@ -21406,7 +21406,7 @@ __cold int env_close(MDBX_env *env, bool resurrect_after_fork) { return rc; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 #if MDBX_USE_MINCORE /*------------------------------------------------------------------------------ @@ -22751,7 +22751,7 @@ __hot pgr_t gc_alloc_single(const MDBX_cursor *const mc) { return gc_alloc_ex(mc, 1, ALLOC_DEFAULT); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 MDBX_NOTHROW_PURE_FUNCTION static bool is_lifo(const MDBX_txn *txn) { return (txn->env->flags & MDBX_LIFORECLAIM) != 0; @@ -22896,20 +22896,12 @@ static inline void zeroize_reserved(const MDBX_env *env, MDBX_val pnl) { static int gcu_loose(MDBX_txn *txn, gcu_t *ctx) { tASSERT(txn, txn->tw.loose_count > 0); - /* Return loose page numbers to tw.repnl, - * though usually none are left at this point. + /* Return loose page numbers to tw.repnl, though usually none are left at this point. * The pages themselves remain in dirtylist. */ if (unlikely(!txn->tw.gc.retxl && txn->tw.gc.last_reclaimed < 1)) { - TRACE("%s: try allocate gc-slot for %zu loose-pages", dbg_prefix(ctx), txn->tw.loose_count); - int err = gc_alloc_ex(&ctx->cursor, 0, ALLOC_RESERVE).err; - if (err == MDBX_SUCCESS) { - TRACE("%s: retry since gc-slot for %zu loose-pages available", dbg_prefix(ctx), txn->tw.loose_count); - return MDBX_RESULT_TRUE; - } - - /* Put loose page numbers in tw.retired_pages, - * since unable to return ones to tw.repnl. */ - err = pnl_need(&txn->tw.retired_pages, txn->tw.loose_count); + /* Put loose page numbers in tw.retired_pages, since unable to return ones to tw.repnl. */ + TRACE("%s: merge %zu loose-pages into %s-pages", dbg_prefix(ctx), txn->tw.loose_count, "retired"); + int err = pnl_need(&txn->tw.retired_pages, txn->tw.loose_count); if (unlikely(err != MDBX_SUCCESS)) return err; for (page_t *lp = txn->tw.loose_pages; lp; lp = page_next(lp)) { @@ -22917,9 +22909,9 @@ static int gcu_loose(MDBX_txn *txn, gcu_t *ctx) { MDBX_ASAN_UNPOISON_MEMORY_REGION(&page_next(lp), sizeof(page_t *)); VALGRIND_MAKE_MEM_DEFINED(&page_next(lp), sizeof(page_t *)); } - TRACE("%s: append %zu loose-pages to retired-pages", dbg_prefix(ctx), txn->tw.loose_count); } else { /* Room for loose pages + temp PNL with same */ + TRACE("%s: merge %zu loose-pages into %s-pages", dbg_prefix(ctx), txn->tw.loose_count, "reclaimed"); int err = pnl_need(&txn->tw.repnl, 2 * txn->tw.loose_count + 2); if (unlikely(err != MDBX_SUCCESS)) return err; @@ -22935,7 +22927,6 @@ static int gcu_loose(MDBX_txn *txn, gcu_t *ctx) { MDBX_PNL_SETSIZE(loose, count); pnl_sort(loose, txn->geo.first_unallocated); pnl_merge(txn->tw.repnl, loose); - TRACE("%s: append %zu loose-pages to reclaimed-pages", dbg_prefix(ctx), txn->tw.loose_count); } /* filter-out list of dirty-pages from loose-pages */ @@ -23728,7 +23719,7 @@ int gc_update(MDBX_txn *txn, gcu_t *ctx) { return rc; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 static void mdbx_init(void); static void mdbx_fini(void); @@ -24191,7 +24182,7 @@ const char *__asan_default_options(void) { #endif /* __SANITIZE_ADDRESS__ */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 #if !(defined(_WIN32) || defined(_WIN64)) /*----------------------------------------------------------------------------* @@ -25045,7 +25036,7 @@ void lck_txn_unlock(MDBX_env *env) { #endif /* !Windows LCK-implementation */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 #if defined(_WIN32) || defined(_WIN64) @@ -25648,7 +25639,7 @@ MDBX_INTERNAL int lck_rpid_check(MDBX_env *env, uint32_t pid) { #endif /* Windows */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold static int lck_setup_locked(MDBX_env *env) { int err = rthc_register(env); @@ -25819,7 +25810,7 @@ void mincore_clean_cache(const MDBX_env *const env) { memset(env->lck->mincore_cache.begin, -1, sizeof(env->lck->mincore_cache.begin)); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold void debug_log_va(int level, const char *function, int line, const char *fmt, va_list args) { ENSURE(nullptr, osal_fastmutex_acquire(&globals.debug_lock) == 0); @@ -26066,7 +26057,7 @@ __cold int mdbx_setup_debug(MDBX_log_level_t level, MDBX_debug_flags_t flags, MD return setup_debug(level, flags, thunk, nullptr, 0); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 typedef struct meta_snap { uint64_t txnid; @@ -26720,7 +26711,7 @@ __cold int meta_validate_copy(MDBX_env *env, const meta_t *meta, meta_t *dest) { return meta_validate(env, dest, data_page(meta), bytes2pgno(env, ptr_dist(meta, env->dxb_mmap.base)), nullptr); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 bsr_t mvcc_bind_slot(MDBX_env *env) { eASSERT(env, env->lck_mmap.lck); @@ -27134,7 +27125,7 @@ __cold txnid_t mvcc_kick_laggards(MDBX_env *env, const txnid_t straggler) { /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __hot int __must_check_result node_add_dupfix(MDBX_cursor *mc, size_t indx, const MDBX_val *key) { page_t *mp = mc->pg[mc->top]; @@ -27495,7 +27486,7 @@ __hot struct node_search_result node_search(MDBX_cursor *mc, const MDBX_val *key return ret; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /// /// https://en.wikipedia.org/wiki/Operating_system_abstraction_layer @@ -30959,7 +30950,7 @@ void osal_ctor(void) { void osal_dtor(void) {} /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __cold int MDBX_PRINTF_ARGS(2, 3) bad_page(const page_t *mp, const char *fmt, ...) { if (LOG_ENABLED(MDBX_LOG_ERROR)) { @@ -31440,7 +31431,7 @@ pgr_t page_get_large(const MDBX_cursor *const mc, const pgno_t pgno, const txnid return page_get_inline(P_ILL_BITS | P_BRANCH | P_LEAF | P_DUPFIX, mc, pgno, front); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 int iov_init(MDBX_txn *const txn, iov_ctx_t *ctx, size_t items, size_t npages, mdbx_filehandle_t fd, bool check_coherence) { @@ -31623,7 +31614,7 @@ int iov_page(MDBX_txn *txn, iov_ctx_t *ctx, page_t *dp, size_t npages) { return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 static inline tree_t *outer_tree(MDBX_cursor *mc) { cASSERT(mc, (mc->flags & z_inner) != 0); @@ -32365,7 +32356,7 @@ size_t page_subleaf2_reserve(const MDBX_env *env, size_t host_page_room, size_t return reserve + (subpage_len & 1); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 pnl_t pnl_alloc(size_t size) { size_t bytes = pnl_size2bytes(size); @@ -32599,7 +32590,7 @@ __hot __noinline size_t pnl_search_nochk(const pnl_t pnl, pgno_t pgno) { return it - begin + 1; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 #if MDBX_ENABLE_REFUND static void refund_reclaimed(MDBX_txn *txn) { @@ -32809,7 +32800,7 @@ bool txn_refund(MDBX_txn *txn) { #endif /* MDBX_ENABLE_REFUND */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 void spill_remove(MDBX_txn *txn, size_t idx, size_t npages) { tASSERT(txn, idx > 0 && idx <= MDBX_PNL_GETSIZE(txn->tw.spilled.list) && txn->tw.spilled.least_removed > 0); @@ -33238,7 +33229,7 @@ __cold int spill_slowpath(MDBX_txn *const txn, MDBX_cursor *const m0, const intp : MDBX_TXN_FULL; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 int tbl_setup(const MDBX_env *env, kvx_t *const kvx, const tree_t *const db) { if (unlikely(!check_table_flags(db->flags))) { @@ -33331,7 +33322,7 @@ int tbl_fetch(MDBX_txn *txn, size_t dbi) { return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 typedef struct rthc_entry { MDBX_env *env; @@ -33882,7 +33873,7 @@ __cold void rthc_dtor(const uint32_t current_pid) { /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 static MDBX_cursor *cursor_clone(const MDBX_cursor *csrc, cursor_couple_t *couple) { cASSERT(csrc, csrc->txn->txnid >= csrc->txn->env->lck->cached_oldest.weak); @@ -35434,7 +35425,7 @@ int tree_propagate_key(MDBX_cursor *mc, const MDBX_val *key) { /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /* Search for the lowest key under the current branch page. * This just bypasses a numkeys check in the current page @@ -35570,7 +35561,7 @@ __hot __noinline int tree_search_finalize(MDBX_cursor *mc, const MDBX_val *key, return MDBX_SUCCESS; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 static inline size_t txl_size2bytes(const size_t size) { assert(size > 0 && size <= txl_max * 2); @@ -35667,7 +35658,7 @@ __hot bool txl_contain(const txl_t txl, txnid_t id) { return false; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 __hot txnid_t txn_snapshot_oldest(const MDBX_txn *const txn) { return mvcc_shapshot_oldest(txn->env, txn->tw.troika.txnid[txn->tw.troika.prefer_steady]); @@ -36747,7 +36738,7 @@ int txn_unpark(MDBX_txn *txn) { return err ? err : MDBX_OUSTED; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 MDBX_MAYBE_UNUSED MDBX_NOTHROW_CONST_FUNCTION MDBX_INTERNAL unsigned log2n_powerof2(size_t value_uintptr) { assert(value_uintptr > 0 && value_uintptr < INT32_MAX && is_powerof2(value_uintptr)); @@ -36777,7 +36768,7 @@ MDBX_NOTHROW_CONST_FUNCTION MDBX_INTERNAL uint64_t rrxmrrxmsx_0(uint64_t v) { return v ^ v >> 28; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 typedef struct walk_ctx { void *userctx; @@ -37065,7 +37056,7 @@ __cold int walk_pages(MDBX_txn *txn, walk_func *visitor, void *user, walk_option return rc; } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 #if defined(_WIN32) || defined(_WIN64) @@ -37238,10 +37229,10 @@ __dll_export 0, 13, 3, - 0, + 106, "", /* pre-release suffix of SemVer - 0.13.3 */ - {"2025-01-12T16:27:02+03:00", "ac3d5b7581e1465dcaedbaade8524a6979b5c641", "92e2b6287eefcc727e3f80e355dec696db450477", "v0.13.3-0-g92e2b628"}, + 0.13.3.106 */ + {"2025-01-27T12:13:26+03:00", "63ac27b32515f914c96209ed46dd9d87c570f2bf", "df27f764ef4028692d5138c2a21dded5e7ebfd4c", "v0.13.3-106-gdf27f764"}, sourcery}; __dll_export diff --git a/mdbxdist/mdbx.c++ b/mdbxdist/mdbx.c++ index 7139d2d..a983c50 100644 --- a/mdbxdist/mdbx.c++ +++ b/mdbxdist/mdbx.c++ @@ -1,8 +1,8 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /* clang-format off */ -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1662,7 +1662,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */ @@ -3198,7 +3198,7 @@ MDBX_NOTHROW_CONST_FUNCTION MDBX_MAYBE_UNUSED static inline pgno_t pgno_sub(size return int64pgno((int64_t)base - (int64_t)subtrahend); } /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2020-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2020-2025 /// /// \brief Non-inline part of the libmdbx C++ API /// diff --git a/mdbxdist/mdbx.h b/mdbxdist/mdbx.h index f8e8589..ce22be0 100644 --- a/mdbxdist/mdbx.h +++ b/mdbxdist/mdbx.h @@ -31,7 +31,7 @@ developers. For the same reason ~~Github~~ is blacklisted forever. \copyright SPDX-License-Identifier: Apache-2.0 \note Please refer to the COPYRIGHT file for explanations license change, credits and acknowledgments. -\author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +\author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 *******************************************************************************/ diff --git a/mdbxdist/mdbx.h++ b/mdbxdist/mdbx.h++ index e96c201..62315f6 100644 --- a/mdbxdist/mdbx.h++ +++ b/mdbxdist/mdbx.h++ @@ -1,5 +1,5 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2020-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2020-2025 /// /// Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`. /// Всё будет хорошо! diff --git a/mdbxdist/mdbx_chk.c b/mdbxdist/mdbx_chk.c index cba5da9..aebad99 100644 --- a/mdbxdist/mdbx_chk.c +++ b/mdbxdist/mdbx_chk.c @@ -1,5 +1,5 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /// /// @@ -16,9 +16,9 @@ #define xMDBX_TOOLS /* Avoid using internal eASSERT() */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1678,7 +1678,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */ diff --git a/mdbxdist/mdbx_copy.c b/mdbxdist/mdbx_copy.c index a40ab21..c241d25 100644 --- a/mdbxdist/mdbx_copy.c +++ b/mdbxdist/mdbx_copy.c @@ -1,7 +1,7 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /// /// mdbx_copy.c - memory-mapped database backup tool /// @@ -16,9 +16,9 @@ #define xMDBX_TOOLS /* Avoid using internal eASSERT() */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1678,7 +1678,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */ diff --git a/mdbxdist/mdbx_drop.c b/mdbxdist/mdbx_drop.c index a2eb326..0be394c 100644 --- a/mdbxdist/mdbx_drop.c +++ b/mdbxdist/mdbx_drop.c @@ -1,7 +1,7 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2021-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2021-2025 /// /// mdbx_drop.c - memory-mapped database delete tool /// @@ -16,9 +16,9 @@ #define xMDBX_TOOLS /* Avoid using internal eASSERT() */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1678,7 +1678,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */ diff --git a/mdbxdist/mdbx_dump.c b/mdbxdist/mdbx_dump.c index 20143bf..a415eab 100644 --- a/mdbxdist/mdbx_dump.c +++ b/mdbxdist/mdbx_dump.c @@ -1,7 +1,7 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /// /// mdbx_dump.c - memory-mapped database dump tool /// @@ -16,9 +16,9 @@ #define xMDBX_TOOLS /* Avoid using internal eASSERT() */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1678,7 +1678,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */ diff --git a/mdbxdist/mdbx_load.c b/mdbxdist/mdbx_load.c index 688c579..907e9b7 100644 --- a/mdbxdist/mdbx_load.c +++ b/mdbxdist/mdbx_load.c @@ -1,7 +1,7 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /// /// mdbx_load.c - memory-mapped database load tool /// @@ -16,9 +16,9 @@ #define xMDBX_TOOLS /* Avoid using internal eASSERT() */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1678,7 +1678,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */ diff --git a/mdbxdist/mdbx_stat.c b/mdbxdist/mdbx_stat.c index 5f47308..96cb029 100644 --- a/mdbxdist/mdbx_stat.c +++ b/mdbxdist/mdbx_stat.c @@ -1,7 +1,7 @@ /// \copyright SPDX-License-Identifier: Apache-2.0 /// \note Please refer to the COPYRIGHT file for explanations license change, /// credits and acknowledgments. -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 /// /// mdbx_stat.c - memory-mapped database status tool /// @@ -16,9 +16,9 @@ #define xMDBX_TOOLS /* Avoid using internal eASSERT() */ /// \copyright SPDX-License-Identifier: Apache-2.0 -/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2024 +/// \author Леонид Юрьев aka Leonid Yuriev \date 2015-2025 -#define MDBX_BUILD_SOURCERY 9549c16ee25142a5064a08cd4f876331eb2b45fe565d64e6019be2687644564e_v0_13_3_0_g92e2b628 +#define MDBX_BUILD_SOURCERY c6a435f74a8ee41db686a43228581987b07a6eb2857931fec778842d40433799_v0_13_3_106_gdf27f764 #define LIBMDBX_INTERNALS #define MDBX_DEPRECATED @@ -1678,7 +1678,7 @@ MDBX_MAYBE_UNUSED MDBX_NOTHROW_PURE_FUNCTION static inline uint32_t osal_bswap32 /** Controls profiling of GC search and updates. */ #ifndef MDBX_ENABLE_PROFGC -#define MDBX_ENABLE_PROFGC 0 +#define MDBX_ENABLE_PROFGC 1 #elif !(MDBX_ENABLE_PROFGC == 0 || MDBX_ENABLE_PROFGC == 1) #error MDBX_ENABLE_PROFGC must be defined as 0 or 1 #endif /* MDBX_ENABLE_PROFGC */