Sitelet https://github.com/erigontech/mdbx-go/commit/1c5bace2d1126d90339b3abe0c359a843f35f77f
Skip to content

Commit 1c5bace

Browse files
committed
libmdbx: bump v0.14.3 -> v0.14.4
Re-vendors the amalgamation via `make cp LIBMDBX_REF=v0.14.4`. Upstream "Skynet Eve" is a bugfix release of the stable branch; the public C API is unchanged (mdbx.h diff is documentation only), so the bindings need no adaptation. Notable upstream changes: - Windows: stricter checks for network, shared and layered volumes, to prevent database corruption and data loss. Placing a database on such a volume can now fail with MDBX_EREMOTE (ERROR_REMOTE_STORAGE_MEDIA_ERROR). - Fixed a missing sub-page header check in page_check(), which could SIGSEGV while checking a corrupted database. - Fixed a regression returning MDBX_BAD_TXN instead of MDBX_OUSTED. - Fixed division truncation in default_rp_augment_limit(), which yielded a too low and "stepwise" default MDBX_opt_rp_augment_limit. - Refined mdbx_get_sysraminfo(): sysinfo()/MemAvailable on Linux, host_statistics64() on macOS. Carries one local fix on top of v0.14.4: the new macOS path passes HOST_VM_INFO_COUNT (15) to host_statistics64(HOST_VM_INFO64), which wants HOST_VM_INFO64_COUNT (104) and fails with KERN_FAILURE otherwise, so mdbx_get_sysraminfo() returned MDBX_ENOSYS on every macOS build -- failing TestGetSysRamInfo and degrading libmdbx's own default dirty-page limit. The deviation is marked "mdbx-go local fix" in libmdbx/mdbx.c and is reported upstream; drop it once upstream takes it. Also notes in the README that a re-vendor wipes such local fixes, and that rebuilding after one needs `go build -a`: the mdbx package pulls libmdbx/mdbx.c in through a cgo #include across package directories, which the Go build cache does not track, so a plain `go test` happily re-runs the old C. `go test` and `go test -race` pass on darwin/arm64.
1 parent 339f96f commit 1c5bace

26 files changed

Lines changed: 700 additions & 563 deletions

‎README.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,12 @@ make cp LIBMDBX_SRC=/path/to/libmdbx # clone lives elsewhere
245245
Only the files tracked at that ref are vendored, so build artifacts sitting in the clone's
246246
working tree stay out, and files deleted upstream are dropped instead of lingering. Upstream's
247247
`.github/` and `.sourcecraft/` CI configs are skipped — they cannot run from a vendored
248-
subdirectory — and `libmdbx/keep.go` is preserved. Then rebuild and test:
248+
subdirectory — and `libmdbx/keep.go` is preserved. Local fixes carried on top of upstream are
249+
wiped by the re-vendor: `git log -S'mdbx-go local fix' -- libmdbx/` lists them, re-apply the ones
250+
upstream has not taken yet. Then rebuild and test:
249251

250252
```
251-
go build ./... && make test
253+
go build -a ./... && make test
252254
```
253255

254256
## Build binaries

‎libmdbx/CMakeLists.txt‎

Lines changed: 102 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88
# Telegram' group https://t.me/libmdbx, MAX' chat https://max.ru/join/dKckvyuARxp1vRK-wnPur8zYCEkbR3OUOmpPWkWxp78.
99
#
1010
# The libmdbx code will forever remain open and with high-quality free support, as far as the life circumstances of the
11-
# project participants allow. Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`,
12-
# BTC `bc1qzvl9uegf2ea6cwlytnanrscyv8snwsvrc0xfsu`, SOL `FTCTgbHajoLVZGr8aEFWMzx3NDMyS5wXJgfeMTmJznRi`.
13-
# Всё будет хорошо!
11+
# project participants allow. Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`, BTC
12+
# `bc1qzvl9uegf2ea6cwlytnanrscyv8snwsvrc0xfsu`, SOL `FTCTgbHajoLVZGr8aEFWMzx3NDMyS5wXJgfeMTmJznRi`. Всё будет хорошо!
1413
#
1514
# The next version is under active non-public development and will be released as MithrilDB and libmithrildb for
1615
# libraries & packages. Admittedly mythical Mithril is resembling silver but being stronger and lighter than steel.
@@ -73,15 +72,17 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION.json"
7372
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_drop.c"
7473
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_defrag.c"
7574
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ntdll.def"
75+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/windows-safeseh-masm.asm"
76+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/windows-safeseh-yasm.asm"
77+
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/windows-safeseh.obj"
7678
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in")
7779
set(MDBX_AMALGAMATED_SOURCE TRUE)
7880
set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
7981
else()
8082
message(
8183
FATAL_ERROR
8284
"\nThe set of libmdbx source code files is incomplete!"
83-
" Instead just follow the https://libmdbx.dqdkfa.ru/usage.html"
84-
" PLEASE, AVOID USING ANY OTHER TECHNIQUES.")
85+
" Instead just follow the https://libmdbx.dqdkfa.ru/usage.html" " PLEASE, AVOID USING ANY OTHER TECHNIQUES.")
8586
endif()
8687

8788
# Provide version
@@ -122,11 +123,13 @@ else()
122123
endif()
123124

124125
if(NOT CMAKE_VERSION VERSION_LESS 3.8.2)
125-
source_group("markdown" FILES REGULAR_EXPRESSION ".*[.]md")
126+
source_group(
127+
"markdown"
128+
FILES
129+
REGULAR_EXPRESSION ".*[.]md")
126130
endif()
127131

128-
# Memcheck-options should be defined before including CTest.
129-
# Otherwise CTest just ignore it.
132+
# Memcheck-options should be defined before including CTest. Otherwise CTest just ignore it.
130133
if(NOT WIN32)
131134
if(NOT MEMORYCHECK_COMMAND)
132135
find_program(MEMORYCHECK_COMMAND valgrind)
@@ -423,20 +426,25 @@ if(WIN32 AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.def")
423426
else()
424427
message(WARNING "MSVC's lib.exe not found")
425428
endif()
426-
elseif(MINGW OR MINGW64)
427-
if(NOT MINGW_DLLTOOL_EXE)
429+
else()
430+
if(NOT DLLTOOL_EXE AND (MINGW OR MINGW64))
431+
# Find dlltool.exe
432+
get_filename_component(CC_DIR ${CMAKE_C_COMPILER} DIRECTORY)
433+
find_program(DLLTOOL_EXE "dlltool.exe" HINTS ${CC_DIR})
434+
endif()
435+
if(NOT DLLTOOL_EXE AND CMAKE_COMPILER_IS_CLANG)
428436
# Find dlltool.exe
429437
get_filename_component(CC_DIR ${CMAKE_C_COMPILER} DIRECTORY)
430-
find_program(MINGW_DLLTOOL_EXE "dlltool.exe" HINTS ${CC_DIR})
438+
find_program(DLLTOOL_EXE "llvm-dlltool.exe" HINTS ${CC_DIR})
431439
endif()
432-
if(MINGW_DLLTOOL_EXE)
433-
message(STATUS "Found MINGW's dlltool: ${MINGW_DLLTOOL_EXE}")
440+
if(DLLTOOL_EXE)
441+
message(STATUS "Found MINGW or LLVM dlltool: ${DLLTOOL_EXE}")
434442
set(MDBX_NTDLL_EXTRA_IMPLIB "${CMAKE_CURRENT_BINARY_DIR}/mdbx_ntdll_extra.a")
435443
add_custom_command(
436444
OUTPUT "${MDBX_NTDLL_EXTRA_IMPLIB}"
437445
COMMENT "Create extra-import-library for ntdll.dll"
438446
MAIN_DEPENDENCY "${MDBX_SOURCE_DIR}/ntdll.def"
439-
COMMAND ${MINGW_DLLTOOL_EXE} -d "${MDBX_SOURCE_DIR}/ntdll.def" -l "${MDBX_NTDLL_EXTRA_IMPLIB}")
447+
COMMAND ${DLLTOOL_EXE} -d "${MDBX_SOURCE_DIR}/ntdll.def" -l "${MDBX_NTDLL_EXTRA_IMPLIB}")
440448
else()
441449
message(WARNING "MINGW's dlltool.exe not found")
442450
endif()
@@ -455,8 +463,8 @@ if(WIN32 AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.def")
455463
endif()
456464
endif()
457465

458-
# Checking needs of linking with `libatomic` for C11 atomics,
459-
# with ability to override/predefine by CMake command line option.
466+
# Checking needs of linking with `libatomic` for C11 atomics, with ability to override/predefine by CMake command line
467+
# option.
460468
if(NOT DEFINED MDBX_NEED_LIBATOMIC)
461469
if(MSVC)
462470
set(MDBX_NEED_LIBATOMIC OFF)
@@ -466,7 +474,8 @@ if(NOT DEFINED MDBX_NEED_LIBATOMIC)
466474
function(check_working_c11_atomics varname)
467475
cmake_push_check_state()
468476
set(CMAKE_REQUIRED_FLAGS "-std=c11")
469-
check_c_source_compiles("
477+
check_c_source_compiles(
478+
"
470479
#include <stdint.h>
471480
#include <stdatomic.h>
472481
volatile _Atomic uint32_t a32;
@@ -498,20 +507,21 @@ if(NOT DEFINED MDBX_NEED_LIBATOMIC)
498507
uint64_t fetch_add = atomic_fetch_add(&a32, __LINE__) + atomic_fetch_add(&a64, __LINE__);
499508
return (load + compare_exchange + fetch_add) % 37;
500509
}
501-
" ${varname})
510+
"
511+
${varname})
502512
cmake_pop_check_state()
503513
endfunction(check_working_c11_atomics)
504514

505515
check_working_c11_atomics(c11_atomics_without_libatomic)
506-
if (c11_atomics_without_libatomic)
516+
if(c11_atomics_without_libatomic)
507517
set(MDBX_NEED_LIBATOMIC OFF)
508518
message(STATUS "No linking with additional library needed for C11 atomics")
509519
else()
510520
cmake_push_check_state()
511521
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
512522
check_working_c11_atomics(c11_atomics_with_libatomic)
513523
cmake_pop_check_state()
514-
if (c11_atomics_with_libatomic)
524+
if(c11_atomics_with_libatomic)
515525
set(MDBX_NEED_LIBATOMIC ON)
516526
message(STATUS "Linking with libatomics is required for C11 atomics")
517527
else()
@@ -534,7 +544,14 @@ endif()
534544
# ~~~
535545
# ######################################################################################################################
536546

537-
set(MDBX_BUILD_OPTIONS ENABLE_UBSAN ENABLE_ASAN ENABLE_MEMCHECK ENABLE_GPROF ENABLE_GCOV MDBX_DEBUG MDBX_CHECKING)
547+
set(MDBX_BUILD_OPTIONS
548+
ENABLE_UBSAN
549+
ENABLE_ASAN
550+
ENABLE_MEMCHECK
551+
ENABLE_GPROF
552+
ENABLE_GCOV
553+
MDBX_DEBUG
554+
MDBX_CHECKING)
538555

539556
if(IOS)
540557
set(MDBX_BUILD_TOOLS_DEFAULT OFF)
@@ -549,8 +566,9 @@ endif()
549566
add_option(MDBX INSTALL_STATIC "Build and install libmdbx for static linking" OFF)
550567
add_option(MDBX BUILD_SHARED_LIBRARY "Build libmdbx as shared library (DLL)" ${BUILD_SHARED_LIBS})
551568
add_option(MDBX BUILD_TOOLS "Build MDBX tools (mdbx_chk/stat/dump/load/copy/defrag/drop)" ${MDBX_BUILD_TOOLS_DEFAULT})
552-
cmake_dependent_option(MDBX_INSTALL_MANPAGES "Install man-pages for MDBX tools (mdbx_chk/stat/dump/load/copy/defrag/drop)" ON
553-
MDBX_BUILD_TOOLS OFF)
569+
cmake_dependent_option(
570+
MDBX_INSTALL_MANPAGES "Install man-pages for MDBX tools (mdbx_chk/stat/dump/load/copy/defrag/drop)" ON
571+
MDBX_BUILD_TOOLS OFF)
554572
add_option(MDBX TXN_CHECKOWNER "Checking transaction matches the calling thread inside libmdbx's API" ON)
555573
add_option(MDBX ENV_CHECKPID "Checking PID inside libmdbx's API against reuse DB environment after the fork()" AUTO)
556574
mark_as_advanced(MDBX_ENV_CHECKPID)
@@ -567,7 +585,9 @@ if(WIN32)
567585
if(MDBX_NTDLL_EXTRA_IMPLIB)
568586
add_option(MDBX WITHOUT_MSVC_CRT "Avoid dependence from MSVC CRT and use ntdll.dll instead" OFF)
569587
endif()
570-
if(MSVC AND NOT CMAKE_SYSTEM_ARCH STREQUAL "x86")
588+
if(MDBX_WITHOUT_MSVC_CRT AND CMAKE_SYSTEM_ARCH STREQUAL "x86")
589+
set(MDBX_NATIVE_SEH OFF)
590+
elseif((MSVC OR CMAKE_COMPILER_IS_CLANG) AND NOT CMAKE_SYSTEM_ARCH STREQUAL "x86")
571591
set(MDBX_NATIVE_SEH ON)
572592
elseif(MINGW)
573593
set(MDBX_NATIVE_SEH OFF)
@@ -596,7 +616,8 @@ mark_as_advanced(MDBX_LOCKING)
596616
add_option(MDBX TRUST_RTC "Does a system have battery-backed Real-Time Clock or just a fake" AUTO)
597617
mark_as_advanced(MDBX_TRUST_RTC)
598618
add_option(
599-
MDBX DISABLE_VALIDATION
619+
MDBX
620+
DISABLE_VALIDATION
600621
"Disable some checks to reduce an overhead and detection probability of database corruption to a values closer to the LMDB"
601622
OFF)
602623
mark_as_advanced(MDBX_DISABLE_VALIDATION)
@@ -611,16 +632,22 @@ add_option(MDBX ENABLE_DBI_SPARSE
611632
add_option(MDBX ENABLE_DBI_LOCKFREE "Support for deferred releasing and a lockfree path to quickly open DBI handles" ON)
612633
add_option(MDBX USE_FALLOCATE "Using posix_fallocate() or fcntl(F_PREALLOCATE) on OSX" AUTO)
613634
mark_as_advanced(MDBX_USE_FALLOCATE)
614-
add_option(MDBX ENABLE_FAKE_NESTED_READONLY_TRANSACTIONS "Enables fake nested read-only transactions, which are much cheaper but do not restore the state of cursors in case of transaction abortion." OFF)
635+
add_option(
636+
MDBX
637+
ENABLE_FAKE_NESTED_READONLY_TRANSACTIONS
638+
"Enables fake nested read-only transactions, which are much cheaper but do not restore the state of cursors in case of transaction abortion."
639+
OFF)
615640
mark_as_advanced(MDBX_ENABLE_FAKE_NESTED_READONLY_TRANSACTIONS)
616641

617642
# Internal debugging
618-
add_option( MDBX DEBUG_SPILLING "Kind of internal debugging" OFF)
619-
add_option( MDBX DEBUG_SEARCH_DISPATCHING "Kind of internal debugging" OFF)
620-
add_option( MDBX DEBUG_SEARCH_BRANCHLESS "Kind of internal debugging" OFF)
643+
add_option(MDBX DEBUG_SPILLING "Kind of internal debugging" OFF)
644+
add_option(MDBX DEBUG_SEARCH_DISPATCHING "Kind of internal debugging" OFF)
645+
add_option(MDBX DEBUG_SEARCH_BRANCHLESS "Kind of internal debugging" OFF)
646+
add_option(MDBX DEBUG_GCU "Kind of internal debugging" OFF)
621647
mark_as_advanced(MDBX_DEBUG_SPILLING)
622648
mark_as_advanced(MDBX_DEBUG_SEARCH_DISPATCHING)
623649
mark_as_advanced(MDBX_DEBUG_SEARCH_BRANCHLESS)
650+
mark_as_advanced(MDBX_DEBUG_GCU)
624651

625652
if(DEFINED MDBX_FORCE_ASSERTIONS)
626653
message(WARNING "The `MDBX_FORCE_ASSERTIONS` is obsolete, please use `MDBX_CHECKING=2` instead")
@@ -740,10 +767,25 @@ else()
740767
message(STATUS "Use C${MDBX_C_STANDARD} for libmdbx but C++ portion is disabled")
741768
endif()
742769

743-
if(WIN32 AND CMAKE_SYSTEM_ARCH STREQUAL "x86" AND NOT MDBX_NATIVE_SEH)
744-
enable_language(ASM_MASM)
745-
add_library(mdbx_safeseh OBJECT "${MDBX_SOURCE_DIR}/windows-safeseh.asm")
746-
set_target_properties(mdbx_safeseh PROPERTIES COMPILE_OPTIONS "/safeseh")
770+
if(WIN32
771+
AND CMAKE_SYSTEM_ARCH STREQUAL "x86"
772+
AND NOT MDBX_NATIVE_SEH)
773+
if(MSVC)
774+
enable_language(ASM_MASM)
775+
add_library(mdbx_safeseh OBJECT "${MDBX_SOURCE_DIR}/windows-safeseh-masm.asm")
776+
set_target_properties(mdbx_safeseh PROPERTIES COMPILE_OPTIONS "/safeseh")
777+
else()
778+
find_program(YASM_EXE NAMES yasm)
779+
if(YASM_EXE)
780+
add_custom_command(
781+
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/windows-safeseh.obj"
782+
COMMAND ${YASM_EXE} -f win32 -o "${CMAKE_CURRENT_BINARY_DIR}/windows-safeseh.obj" "${MDBX_SOURCE_DIR}/windows-safeseh-yasm.asm"
783+
DEPENDS "${MDBX_SOURCE_DIR}/windows-safeseh-yasm.asm")
784+
add_library(mdbx_safeseh OBJECT "${CMAKE_CURRENT_BINARY_DIR}/windows-safeseh.obj")
785+
else()
786+
add_library(mdbx_safeseh OBJECT "${MDBX_SOURCE_DIR}/windows-safeseh.obj")
787+
endif()
788+
endif()
747789
endif()
748790

749791
macro(target_setup_options TARGET)
@@ -778,7 +820,8 @@ macro(target_setup_options TARGET)
778820
target_compile_options(${TARGET} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:/fp:fast;/fp:except-;/GS-;/Gs->")
779821
endif()
780822
if(CC_HAS_FORCE_INTERLOCKED_CALL)
781-
target_compile_options(${TARGET} PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:$<$<CONFIG:Release>:/forceInterlockedFunctions->>")
823+
target_compile_options(${TARGET}
824+
PRIVATE "$<$<COMPILE_LANGUAGE:CXX,C>:$<$<CONFIG:Release>:/forceInterlockedFunctions->>")
782825
endif()
783826
endif()
784827
endmacro()
@@ -789,7 +832,7 @@ macro(libmdbx_setup_libs TARGET MODE)
789832
else()
790833
target_link_libraries(${TARGET} ${MODE} Threads::Threads)
791834
endif()
792-
if (MDBX_NEED_LIBATOMIC)
835+
if(MDBX_NEED_LIBATOMIC)
793836
target_link_libraries(${TARGET} PUBLIC "atomic")
794837
endif()
795838
if(WIN32)
@@ -840,6 +883,9 @@ else()
840883
set(MDBX_LIBRARY mdbx-static)
841884
endif()
842885
target_include_directories(mdbx-static INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
886+
if(MDBX_CLANG_BUILTINS_LIB)
887+
target_link_libraries(mdbx-static INTERFACE "${MDBX_CLANG_BUILTINS_LIB}")
888+
endif()
843889

844890
# ######################################################################################################################
845891

@@ -889,6 +935,9 @@ if(MDBX_BUILD_SHARED_LIBRARY)
889935
endif()
890936
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_SHARED_LINKER_FLAGS})
891937
target_include_directories(mdbx INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
938+
if(MDBX_CLANG_BUILTINS_LIB)
939+
target_link_libraries(mdbx PRIVATE "${MDBX_CLANG_BUILTINS_LIB}")
940+
endif()
892941
endif()
893942

894943
if(MDBX_BUILD_SHARED_LIBRARY AND MDBX_LINK_TOOLS_NONSTATIC)
@@ -940,7 +989,15 @@ if(MDBX_BUILD_TOOLS)
940989
set(WINGETOPT_SRC "")
941990
endif()
942991

943-
foreach(TOOL chk copy stat dump load drop defrag)
992+
foreach(
993+
TOOL
994+
chk
995+
copy
996+
stat
997+
dump
998+
load
999+
drop
1000+
defrag)
9441001
if(MDBX_AMALGAMATED_SOURCE)
9451002
add_executable(mdbx_${TOOL} mdbx.h ${MDBX_SOURCE_DIR}/mdbx_${TOOL}.c ${WINGETOPT_SRC})
9461003
else()
@@ -996,8 +1053,15 @@ if(MDBX_BUILD_TOOLS)
9961053
if(NOT DEFINED MDBX_TOOLS_INSTALL_DESTINATION)
9971054
set(MDBX_TOOLS_INSTALL_DESTINATION ${CMAKE_INSTALL_BINDIR})
9981055
endif()
999-
install(TARGETS mdbx_chk mdbx_stat mdbx_copy mdbx_dump mdbx_load mdbx_drop mdbx_defrag
1000-
RUNTIME DESTINATION ${MDBX_TOOLS_INSTALL_DESTINATION} COMPONENT runtime)
1056+
install(
1057+
TARGETS mdbx_chk
1058+
mdbx_stat
1059+
mdbx_copy
1060+
mdbx_dump
1061+
mdbx_load
1062+
mdbx_drop
1063+
mdbx_defrag
1064+
RUNTIME DESTINATION ${MDBX_TOOLS_INSTALL_DESTINATION} COMPONENT runtime)
10011065
if(MDBX_INSTALL_MANPAGES)
10021066
if(NOT DEFINED MDBX_MAN_INSTALL_DESTINATION)
10031067
set(MDBX_MAN_INSTALL_DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)

‎libmdbx/ChangeLog.md‎

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,55 @@ ChangeLog
33

44
The source code is available on [SourceCraft](https://sourcecraft.dev/dqdkfa/libmdbx) and mirror on [GitHub](https://github.com/Mithril-mine/libmdbx).
55
Please use the `stable` branch or the latest release for production environment through staging, but the `master` branch for development a derivative projects.
6-
Donations are welcome to ETH `0xD104d8f8B2dC312aaD74899F83EBf3EEBDC1EA3A`,
7-
BTC `bc1qzvl9uegf2ea6cwlytnanrscyv8snwsvrc0xfsu`, SOL `FTCTgbHajoLVZGr8aEFWMzx3NDMyS5wXJgfeMTmJznRi`.
86
Всё будет хорошо!
97

10-
## v0.14.3 "Китов" (Kitov) at 2026-08-09.
8+
## v0.14.4 "Skynet Eve" (Накануне Skynet) at 2026-09-18
9+
10+
The supporting release of a stable branch with bug fixes.
11+
Recommended for use in production.
12+
13+
### Important:
14+
15+
The project website [libmdbx.dqdkfa.ru](https://libmdbx.dqdkfa.ru/) has been re-created:
16+
- The advice, explanations, questions and answers, from correspondence, forums and other sources have been compiled.
17+
- All information has been aggregated into a knowledge base, and the corresponding sections have been compiled on the website.
18+
- The documentation generated via Doxgygen has been moved to /doxygen, with old links redirection.
19+
- A lot of work has been done using AI.
20+
21+
### Appreciations:
22+
23+
- [Andrea Lanfranchi](https://github.com/AndreaLanfranchi) for bugs reporting and assistant fix ones.
24+
25+
### Backward compatibility breaks:
26+
27+
- On Windows now stricter database placement checks on network, shared, and layered volumes to prevent database corruption and data loss.
28+
This can lead to a `MDBX_EREMOTE` error (`ERROR_REMOTE_STORAGE_MEDIA_ERROR`) return in dangerous situations when WOF is active (on compressed volumes).
29+
Just don't use Windows, let alone WOF, to avoid data loss, or open databases exclusively for reading only (`MDBX_EXCLUSIVE | MDBX_RDONLY`).
30+
31+
### Improvements:
32+
33+
- The "crash" meaning clarified in the documentation.
34+
- Prefer to use non-portable `fallocate()` to avoid emulation in glibc.
35+
- More CI workflows: CLANG-ARM64 on Windows, MingGW both 32- and 64- bitness, etc.
36+
- Refined `mdbx_get_sysraminfo()` internals for better `avail_pages` estimation.
37+
- Clariied `mdbx_env_defrag()` to eliminate doubts about the non‑impact of `result=nullptr` on the returned code.
38+
### Fixes:
39+
40+
- Fixed `entry point _except_handler4 not found in mdbx.dll` in 32-bit build with `MDBX_WITHOUT_MSVC_CRT=ON`.
41+
- Fixed building by CLANG/LLVM on Windows, including Microsoft Clang from Visual Studio.
42+
- Fixed `scan4seq_neon()` for LLP4/ARM64-Windows.
43+
- Fixed building for Win32 with `MDBX_NATIVE_SEH=OFF` without MASM, including cross-compilation cases.
44+
- Fixed division truncation/underflow in the `default_rp_augment_limit()` which lead to too low and "stepwise" default `MDBX_opt_rp_augment_limit`.
45+
- Fixed regression leads returning `MDBX_BAD_TXN` instead of `MDBX_OUSTED` in particular cases.
46+
- Fixed doxygen mis-reference to the `mdbx_set_panic()`.
47+
- Fixed missing sub-page header check inside `page_check()` what could be causing `SIGSEGV` during checking a corrupted database.
48+
49+
### Misc:
50+
- The title of the "MAC chat" link has been changed and the icon has been removed.
51+
52+
--------------------------------------------------------------------------------
53+
54+
## v0.14.3 "Китов" (Kitov) at 2026-08-09
1155

1256
The supporting release with a lot of bug fixes,
1357
in memory of [Anatoly Kitov](https://en.wikipedia.org/wiki/Anatoly_Kitov), a pioneer of cybernetics and the one of inventors of M-100, which was a most powerful computer of the World in 1958.

0 commit comments

Comments
 (0)