Cache bin: Add a debug method for init checking.

This commit is contained in:
David Goldblatt 2020-03-02 18:07:19 -08:00 committed by David Goldblatt
parent 370c1ea007
commit 6a7aa46ef7
3 changed files with 14 additions and 2 deletions

View File

@ -354,4 +354,11 @@ void cache_bin_postincrement(cache_bin_info_t *infos, szind_t ninfos,
void cache_bin_init(cache_bin_t *bin, cache_bin_info_t *info, void *alloc, void cache_bin_init(cache_bin_t *bin, cache_bin_info_t *info, void *alloc,
size_t *cur_offset); size_t *cur_offset);
/*
* If a cache bin was zero initialized (either because it lives in static or
* thread-local storage, or was memset to 0), this function indicates whether or
* not cache_bin_init was called on it.
*/
bool cache_bin_still_zero_initialized(cache_bin_t *bin);
#endif /* JEMALLOC_INTERNAL_CACHE_BIN_H */ #endif /* JEMALLOC_INTERNAL_CACHE_BIN_H */

View File

@ -130,8 +130,8 @@ tcache_available(tsd_t *tsd) {
if (likely(tsd_tcache_enabled_get(tsd))) { if (likely(tsd_tcache_enabled_get(tsd))) {
/* Associated arena == NULL implies tcache init in progress. */ /* Associated arena == NULL implies tcache init in progress. */
assert(tsd_tcachep_get(tsd)->arena == NULL || assert(tsd_tcachep_get(tsd)->arena == NULL ||
tcache_small_bin_get(tsd_tcachep_get(tsd), 0)->cur_ptr.ptr !cache_bin_still_zero_initialized(
!= NULL); tcache_small_bin_get(tsd_tcachep_get(tsd), 0)));
return true; return true;
} }

View File

@ -102,3 +102,8 @@ cache_bin_init(cache_bin_t *bin, cache_bin_info_t *info, void *alloc,
assert(cache_bin_ncached_get(bin, info) == 0); assert(cache_bin_ncached_get(bin, info) == 0);
assert(cache_bin_empty_position_get(bin, info) == empty_position); assert(cache_bin_empty_position_get(bin, info) == empty_position);
} }
bool
cache_bin_still_zero_initialized(cache_bin_t *bin) {
return bin->cur_ptr.ptr == NULL;
}