mirror of
https://gitflic.ru/project/erthink/libmdbx.git
synced 2025-02-02 13:25:54 +00:00
mdbx: устранение несущественных предупреждений Valgrind.
This commit is contained in:
parent
2c8d3e1e12
commit
24f2e878c1
29
src/core.c
29
src/core.c
@ -2221,11 +2221,11 @@ static __always_inline size_t pnl_size2bytes(size_t size) {
|
|||||||
#endif /* MDBX_PNL_PREALLOC_FOR_RADIXSORT */
|
#endif /* MDBX_PNL_PREALLOC_FOR_RADIXSORT */
|
||||||
STATIC_ASSERT(MDBX_ASSUME_MALLOC_OVERHEAD +
|
STATIC_ASSERT(MDBX_ASSUME_MALLOC_OVERHEAD +
|
||||||
(MDBX_PGL_LIMIT * (MDBX_PNL_PREALLOC_FOR_RADIXSORT + 1) +
|
(MDBX_PGL_LIMIT * (MDBX_PNL_PREALLOC_FOR_RADIXSORT + 1) +
|
||||||
MDBX_PNL_GRANULATE + 2) *
|
MDBX_PNL_GRANULATE + 3) *
|
||||||
sizeof(pgno_t) <
|
sizeof(pgno_t) <
|
||||||
SIZE_MAX / 4 * 3);
|
SIZE_MAX / 4 * 3);
|
||||||
size_t bytes =
|
size_t bytes =
|
||||||
ceil_powerof2(MDBX_ASSUME_MALLOC_OVERHEAD + sizeof(pgno_t) * (size + 2),
|
ceil_powerof2(MDBX_ASSUME_MALLOC_OVERHEAD + sizeof(pgno_t) * (size + 3),
|
||||||
MDBX_PNL_GRANULATE * sizeof(pgno_t)) -
|
MDBX_PNL_GRANULATE * sizeof(pgno_t)) -
|
||||||
MDBX_ASSUME_MALLOC_OVERHEAD;
|
MDBX_ASSUME_MALLOC_OVERHEAD;
|
||||||
return bytes;
|
return bytes;
|
||||||
@ -2233,8 +2233,8 @@ static __always_inline size_t pnl_size2bytes(size_t size) {
|
|||||||
|
|
||||||
static __always_inline pgno_t pnl_bytes2size(const size_t bytes) {
|
static __always_inline pgno_t pnl_bytes2size(const size_t bytes) {
|
||||||
size_t size = bytes / sizeof(pgno_t);
|
size_t size = bytes / sizeof(pgno_t);
|
||||||
assert(size > 2 && size <= MDBX_PGL_LIMIT + /* alignment gap */ 65536);
|
assert(size > 3 && size <= MDBX_PGL_LIMIT + /* alignment gap */ 65536);
|
||||||
size -= 2;
|
size -= 3;
|
||||||
#if MDBX_PNL_PREALLOC_FOR_RADIXSORT
|
#if MDBX_PNL_PREALLOC_FOR_RADIXSORT
|
||||||
size >>= 1;
|
size >>= 1;
|
||||||
#endif /* MDBX_PNL_PREALLOC_FOR_RADIXSORT */
|
#endif /* MDBX_PNL_PREALLOC_FOR_RADIXSORT */
|
||||||
@ -2454,9 +2454,9 @@ __hot static size_t pnl_merge(MDBX_PNL dst, const MDBX_PNL src) {
|
|||||||
const size_t src_len = MDBX_PNL_GETSIZE(src);
|
const size_t src_len = MDBX_PNL_GETSIZE(src);
|
||||||
const size_t dst_len = MDBX_PNL_GETSIZE(dst);
|
const size_t dst_len = MDBX_PNL_GETSIZE(dst);
|
||||||
size_t total = dst_len;
|
size_t total = dst_len;
|
||||||
|
assert(MDBX_PNL_ALLOCLEN(dst) >= total);
|
||||||
if (likely(src_len > 0)) {
|
if (likely(src_len > 0)) {
|
||||||
total += src_len;
|
total += src_len;
|
||||||
assert(MDBX_PNL_ALLOCLEN(dst) >= total);
|
|
||||||
if (!MDBX_DEBUG && total < (MDBX_HAVE_CMOV ? 21 : 12))
|
if (!MDBX_DEBUG && total < (MDBX_HAVE_CMOV ? 21 : 12))
|
||||||
goto avoid_call_libc_for_short_cases;
|
goto avoid_call_libc_for_short_cases;
|
||||||
if (dst_len == 0 ||
|
if (dst_len == 0 ||
|
||||||
@ -2572,9 +2572,19 @@ __hot __noinline static size_t pnl_search_nochk(const MDBX_PNL pnl,
|
|||||||
static __inline size_t pnl_search(const MDBX_PNL pnl, pgno_t pgno,
|
static __inline size_t pnl_search(const MDBX_PNL pnl, pgno_t pgno,
|
||||||
size_t limit) {
|
size_t limit) {
|
||||||
assert(pnl_check_allocated(pnl, limit));
|
assert(pnl_check_allocated(pnl, limit));
|
||||||
|
if (MDBX_HAVE_CMOV) {
|
||||||
|
/* cmov-ускоренный бинарный поиск может читать (но не использовать) один
|
||||||
|
* элемент за концом данных, этот элемент в пределах выделенного участка
|
||||||
|
* памяти, но не инициализирован. */
|
||||||
|
VALGRIND_MAKE_MEM_DEFINED(MDBX_PNL_END(pnl), sizeof(pgno_t));
|
||||||
|
}
|
||||||
assert(pgno < limit);
|
assert(pgno < limit);
|
||||||
(void)limit;
|
(void)limit;
|
||||||
return pnl_search_nochk(pnl, pgno);
|
size_t n = pnl_search_nochk(pnl, pgno);
|
||||||
|
if (MDBX_HAVE_CMOV) {
|
||||||
|
VALGRIND_MAKE_MEM_UNDEFINED(MDBX_PNL_END(pnl), sizeof(pgno_t));
|
||||||
|
}
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline size_t search_spilled(const MDBX_txn *txn, pgno_t pgno) {
|
static __inline size_t search_spilled(const MDBX_txn *txn, pgno_t pgno) {
|
||||||
@ -3788,7 +3798,8 @@ static MDBX_page *page_malloc(MDBX_txn *txn, size_t num) {
|
|||||||
if (likely(num == 1 && np)) {
|
if (likely(num == 1 && np)) {
|
||||||
eASSERT(env, env->me_dp_reserve_len > 0);
|
eASSERT(env, env->me_dp_reserve_len > 0);
|
||||||
MDBX_ASAN_UNPOISON_MEMORY_REGION(np, size);
|
MDBX_ASAN_UNPOISON_MEMORY_REGION(np, size);
|
||||||
VALGRIND_MEMPOOL_ALLOC(env, np, size);
|
VALGRIND_MEMPOOL_ALLOC(env, ptr_disp(np, -(ptrdiff_t)sizeof(size_t)),
|
||||||
|
size + sizeof(size_t));
|
||||||
VALGRIND_MAKE_MEM_DEFINED(&mp_next(np), sizeof(MDBX_page *));
|
VALGRIND_MAKE_MEM_DEFINED(&mp_next(np), sizeof(MDBX_page *));
|
||||||
env->me_dp_reserve = mp_next(np);
|
env->me_dp_reserve = mp_next(np);
|
||||||
env->me_dp_reserve_len -= 1;
|
env->me_dp_reserve_len -= 1;
|
||||||
@ -3832,7 +3843,7 @@ static void dpage_free(MDBX_env *env, MDBX_page *dp, size_t npages) {
|
|||||||
MDBX_ASAN_POISON_MEMORY_REGION(dp, env->me_psize);
|
MDBX_ASAN_POISON_MEMORY_REGION(dp, env->me_psize);
|
||||||
MDBX_ASAN_UNPOISON_MEMORY_REGION(&mp_next(dp), sizeof(MDBX_page *));
|
MDBX_ASAN_UNPOISON_MEMORY_REGION(&mp_next(dp), sizeof(MDBX_page *));
|
||||||
mp_next(dp) = env->me_dp_reserve;
|
mp_next(dp) = env->me_dp_reserve;
|
||||||
VALGRIND_MEMPOOL_FREE(env, dp);
|
VALGRIND_MEMPOOL_FREE(env, ptr_disp(dp, -(ptrdiff_t)sizeof(size_t)));
|
||||||
env->me_dp_reserve = dp;
|
env->me_dp_reserve = dp;
|
||||||
env->me_dp_reserve_len += 1;
|
env->me_dp_reserve_len += 1;
|
||||||
} else {
|
} else {
|
||||||
@ -15294,7 +15305,6 @@ __cold int mdbx_env_close_ex(MDBX_env *env, bool dont_sync) {
|
|||||||
VALGRIND_MAKE_MEM_DEFINED(&mp_next(dp), sizeof(MDBX_page *));
|
VALGRIND_MAKE_MEM_DEFINED(&mp_next(dp), sizeof(MDBX_page *));
|
||||||
env->me_dp_reserve = mp_next(dp);
|
env->me_dp_reserve = mp_next(dp);
|
||||||
void *const ptr = ptr_disp(dp, -(ptrdiff_t)sizeof(size_t));
|
void *const ptr = ptr_disp(dp, -(ptrdiff_t)sizeof(size_t));
|
||||||
VALGRIND_MEMPOOL_FREE(env, ptr);
|
|
||||||
osal_free(ptr);
|
osal_free(ptr);
|
||||||
}
|
}
|
||||||
VALGRIND_DESTROY_MEMPOOL(env);
|
VALGRIND_DESTROY_MEMPOOL(env);
|
||||||
@ -24669,7 +24679,6 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
|||||||
VALGRIND_MAKE_MEM_DEFINED(&mp_next(dp), sizeof(MDBX_page *));
|
VALGRIND_MAKE_MEM_DEFINED(&mp_next(dp), sizeof(MDBX_page *));
|
||||||
env->me_dp_reserve = mp_next(dp);
|
env->me_dp_reserve = mp_next(dp);
|
||||||
void *const ptr = ptr_disp(dp, -(ptrdiff_t)sizeof(size_t));
|
void *const ptr = ptr_disp(dp, -(ptrdiff_t)sizeof(size_t));
|
||||||
VALGRIND_MEMPOOL_FREE(env, ptr);
|
|
||||||
osal_free(ptr);
|
osal_free(ptr);
|
||||||
env->me_dp_reserve_len -= 1;
|
env->me_dp_reserve_len -= 1;
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,14 @@
|
|||||||
...
|
...
|
||||||
fun:meta_sync*
|
fun:meta_sync*
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
msync-spill
|
||||||
|
Memcheck:Param
|
||||||
|
msync(start)
|
||||||
|
fun:msync
|
||||||
|
...
|
||||||
|
fun:txn_spill*
|
||||||
|
}
|
||||||
|
|
||||||
# memcmp() inside iov_write() as workaround for https://libmdbx.dqdkfa.ru/dead-github/issues/269
|
# memcmp() inside iov_write() as workaround for https://libmdbx.dqdkfa.ru/dead-github/issues/269
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user