mirror of
https://github.com/hanzoai/datastore.git
synced 2026-09-26 13:55:07 +00:00
Simplify jemalloc integration by replacing the three-mechanism approach (`JEMALLOC_IS_MALLOC` + `JEMALLOC_OVERRIDE___LIBC_*` + linker `--wrap`) with a cleaner two-step design: 1. Compile jemalloc with `je_` prefix so it only exports `je_malloc`, `je_free`, etc. (matching what Darwin already does). 2. Define our own `malloc`/`free` in `malloc.cpp` that perform memory tracking and delegate to `je_malloc`/`je_free`. Provide `__libc_*` aliases on glibc to intercept internal calls. Changes: - Enable `JEMALLOC_PREFIX "je_"` in all non-Darwin `jemalloc_internal_defs.h.in` - Undef `JEMALLOC_IS_MALLOC` and all `JEMALLOC_OVERRIDE___LIBC_*` defines - Remove `JEMALLOC_OVERRIDE_MEMALIGN`/`VALLOC`/`PVALLOC` from `jemalloc_defs.h` - Add `JEMALLOC_NO_RENAME` interface define so consumer code sees `je_*` names - Prefix all jemalloc API calls (`mallctl` -> `je_mallctl`, etc.) in ClickHouse - Rewrite `memory.h` to call `je_malloc`/`je_free` directly instead of `__real_*` - Rewrite `malloc.cpp` with tracking wrappers calling `je_*` underneath - Rewrite `AllocationInterceptors.h` to map `__real_*` -> `je_*` or `::*` - Remove `__wrap_*` functions from `AllocationInterceptors.cpp` - Remove `--wrap` linker flags from `CMakeLists.txt` - Add jemalloc + clickhouse_common_io deps to `clickhouse_malloc` OBJECT library - And also fix JEMALLOC_CPREFIX for Darwin, that was the only platform that uses JE_MALLOC_CONF (over MALLOC_CONF) Co-Authored-By: Claude <[email protected]>