libmdbx 0.11.8 (Baked Apple)
The stable release with an important fixes and workaround for the critical macOS thread-local-storage issue.
37 files changed, 2060 insertions(+), 1458 deletions(-)
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
Acknowledgements:
New:
- Added most of transactions flags to the public API.
- Added
MDBX_NOSUCCESS_EMPTY_COMMIT
build option to return non-success result (MDBX_RESULT_TRUE
) on empty commit. - Reworked validation and import of DBI-handles into a transaction. Assumes these changes will be invisible to most users, but will cause fewer surprises in complex DBI cases.
- Added ability to open DB in without-LCK (exclusive read-only) mode in case no permissions to create/write LCK-file.
Fixes:
- A series of fixes and improvements for automatically generated documentation (Doxygen).
- Fixed copy&paste bug with could lead to
SIGSEGV
(nullptr dereference) in the exclusive/no-lck mode. - Fixed minor warnings from modern Apple’s CLANG 13.
- Fixed minor warnings from CLANG 14 and in-development CLANG 15.
- Fixed
SIGSEGV
regression in without-LCK (exclusive read-only) mode. - Fixed
mdbx_check_fs_local()
for CDROM case on Windows. - Fixed nasty typo of typename which caused false
MDBX_CORRUPTED
error in a rare execution path, when the size of the thread-ID type not equal to 8. Fixed write-after-free memory corruption on latest
macOS
during finalization/cleanup of thread(s) that executed read transaction(s).The issue was suddenly discovered by a CI after adding an iteration with macOS 11 “Big Sur”, and then reproduced on recent release of macOS 12 “Monterey”. The issue was never noticed nor reported on macOS 10 “Catalina” nor others. Analysis shown that the problem caused by a change in the behavior of the system library (internals of dyld and pthread) during thread finalization/cleanup: now a memory allocated for a
__thread
variable(s) is released before execution of the registered Thread-Local-Storage destructor(s), thus a TLS-destructor will write-after-free just by legitime dereference any__thread
variable. This is unexpected crazy-like behavior since the order of resources releasing/destroying is not the reverse of ones acquiring/construction order. Nonetheless such surprise is now workarounded by using atomic compare-and-swap operations on a 64-bit signatures/cookies.- Fixed Elbrus/E2K LCC 1.26 compiler warnings (memory model for atomic operations, etc).
Minors:
- Refined
release-assets
GNU Make target. - Added logging to
mdbx_fetch_sdb()
to help debugging complex DBI-handels use cases. - Added explicit error message from probe of no-support for
std::filesystem
. - Added contributors “score” table by
git fame
to generated docs. - Added
mdbx_assert_fail()
to public API (mostly for backtracing). - Now C++20 concepts used/enabled only when
__cpp_lib_concepts >= 202002
. - Don’t provide nor report package information if used as a CMake subproject.
Downloads:
- 249K, libmdbx-amalgamated-0.11.8.zpaq, sha256sum:
bdb32e3ff9980d830ef38fdf2acc91e2d65d4b2af9c6973bf7d5dad84553f47a
- 332K, libmdbx-amalgamated-0.11.8.tar.xz, sha256sum:
06011f361481ee7adc2111e48b7b121384294e0b6b8f10c75e7886629297b279
- 434K, libmdbx-amalgamated-0.11.8.tar.bz2, sha256sum:
9876cc0e9e76b285966e7f7d5e6f8b50a679795d8ab24e5c155625caf6567d1b
- 672K, libmdbx-amalgamated-0.11.8.tar.gz, sha256sum:
f15f69d6ad334b2d1a617412b20171b8b5a7f31d4733cc78e7cc0e076e5a1bf9
- 684K, libmdbx-amalgamated-0_11_8.zip, sha256sum:
3a684eef23f406bdd9872d4e5516cf3242d18ddcdeda583ec29aa21933f4e532
For earlier versions please refer to the git tags and the ChangeLog.