mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-25 14:23:12 +00:00
Fix: Adjust CACHE_BIN_NFLUSH_BATCH_MAX size to prevent assert failures
The maximum allowed value for `nflush_batch` is `CACHE_BIN_NFLUSH_BATCH_MAX`. However, `tcache_bin_flush_impl_small` could potentially declare an array of `emap_batch_lookup_result_t` of size `CACHE_BIN_NFLUSH_BATCH_MAX + 1`. leads to a `VARIABLE_ARRAY` assertion failure, observed when `tcache_nslots_small_max` is configured to 2048. This patch ensures the array size does not exceed the allowed maximum. Signed-off-by: Xin Yang <yangxin.dev@bytedance.com>
This commit is contained in:
@@ -616,7 +616,7 @@ struct cache_bin_fill_ctl_s {
|
|||||||
* This is to avoid stack overflow when we do batch edata look up, which
|
* This is to avoid stack overflow when we do batch edata look up, which
|
||||||
* reserves a nflush * sizeof(emap_batch_lookup_result_t) stack variable.
|
* reserves a nflush * sizeof(emap_batch_lookup_result_t) stack variable.
|
||||||
*/
|
*/
|
||||||
#define CACHE_BIN_NFLUSH_BATCH_MAX (VARIABLE_ARRAY_SIZE_MAX >> LG_SIZEOF_PTR)
|
#define CACHE_BIN_NFLUSH_BATCH_MAX ((VARIABLE_ARRAY_SIZE_MAX >> LG_SIZEOF_PTR) - 1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Filling and flushing are done in batch, on arrays of void *s. For filling,
|
* Filling and flushing are done in batch, on arrays of void *s. For filling,
|
||||||
|
|||||||
Reference in New Issue
Block a user