From 04fef2a2fe700fc4f674be9002f210de8efa17a6 Mon Sep 17 00:00:00 2001 From: DaniPopes <57450786+DaniPopes@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:38:48 +0200 Subject: [PATCH] chore(mdbx): replace deprecated MDBX_NOTLS with MDBX_NOSTICKYTHREADS MDBX_NOTLS was deprecated upstream in favor of MDBX_NOSTICKYTHREADS. Update the flag usage, blocklist the deprecated constant from bindgen, and fix the doc comment in txn_pool. --- crates/storage/libmdbx-rs/mdbx-sys/build.rs | 1 + crates/storage/libmdbx-rs/src/flags.rs | 2 +- crates/storage/libmdbx-rs/src/txn_pool.rs | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/storage/libmdbx-rs/mdbx-sys/build.rs b/crates/storage/libmdbx-rs/mdbx-sys/build.rs index c265d02e233..d3d3234e1bc 100644 --- a/crates/storage/libmdbx-rs/mdbx-sys/build.rs +++ b/crates/storage/libmdbx-rs/mdbx-sys/build.rs @@ -97,6 +97,7 @@ fn generate_bindings(mdbx: &Path, out_file: &Path) { let bindings = bindgen::Builder::default() .header(mdbx.join("mdbx.h").to_string_lossy()) .allowlist_var("^(MDBX|mdbx)_.*") + .blocklist_item("MDBX_NOTLS") .allowlist_type("^(MDBX|mdbx)_.*") .allowlist_function("^(MDBX|mdbx)_.*") .size_t_is_usize(true) diff --git a/crates/storage/libmdbx-rs/src/flags.rs b/crates/storage/libmdbx-rs/src/flags.rs index 6aefab57b19..d1f7da4fd49 100644 --- a/crates/storage/libmdbx-rs/src/flags.rs +++ b/crates/storage/libmdbx-rs/src/flags.rs @@ -199,7 +199,7 @@ impl EnvironmentFlags { flags |= ffi::MDBX_LIFORECLAIM; } - flags |= ffi::MDBX_NOTLS; + flags |= ffi::MDBX_NOSTICKYTHREADS; flags } diff --git a/crates/storage/libmdbx-rs/src/txn_pool.rs b/crates/storage/libmdbx-rs/src/txn_pool.rs index f8d09a3a6b4..e429ba124c2 100644 --- a/crates/storage/libmdbx-rs/src/txn_pool.rs +++ b/crates/storage/libmdbx-rs/src/txn_pool.rs @@ -3,8 +3,8 @@ use crossbeam_queue::ArrayQueue; /// Lock-free pool of reset read-only MDBX transaction handles. /// -/// With `MDBX_NOTLS` (which reth always sets), every `mdbx_txn_begin_ex` for a read transaction -/// calls `mvcc_bind_slot`, which acquires `lck_rdt_lock` — a pthread mutex. Under high +/// With `MDBX_NOSTICKYTHREADS` (which reth always sets), every `mdbx_txn_begin_ex` for a read +/// transaction calls `mvcc_bind_slot`, which acquires `lck_rdt_lock` — a pthread mutex. Under high /// concurrency (e.g., prewarming), this becomes a contention point. /// /// This pool caches transaction handles that have been reset via `mdbx_txn_reset`. A reset handle