Remove a stray memset(), and fix a junk filling test regression.

This commit is contained in:
Jason Evans 2016-06-03 20:04:30 -07:00
parent f02fec8839
commit 04942c3d90
4 changed files with 34 additions and 7 deletions

View File

@ -19,8 +19,11 @@ void *large_ralloc(tsdn_t *tsdn, arena_t *arena, extent_t *extent,
#ifdef JEMALLOC_JET #ifdef JEMALLOC_JET
typedef void (large_dalloc_junk_t)(void *, size_t); typedef void (large_dalloc_junk_t)(void *, size_t);
extern large_dalloc_junk_t *large_dalloc_junk; extern large_dalloc_junk_t *large_dalloc_junk;
typedef void (large_dalloc_maybe_junk_t)(tsdn_t *, void *, size_t);
extern large_dalloc_maybe_junk_t *large_dalloc_maybe_junk;
#else #else
void large_dalloc_junk(void *ptr, size_t usize); void large_dalloc_junk(void *ptr, size_t usize);
void large_dalloc_maybe_junk(tsdn_t *tsdn, void *ptr, size_t usize);
#endif #endif
void large_dalloc_junked_locked(tsdn_t *tsdn, extent_t *extent); void large_dalloc_junked_locked(tsdn_t *tsdn, extent_t *extent);
void large_dalloc(tsdn_t *tsdn, extent_t *extent); void large_dalloc(tsdn_t *tsdn, extent_t *extent);

View File

@ -250,6 +250,7 @@ jemalloc_prefork
large_dalloc large_dalloc
large_dalloc_junk large_dalloc_junk
large_dalloc_junked_locked large_dalloc_junked_locked
large_dalloc_maybe_junk
large_malloc large_malloc
large_palloc large_palloc
large_prof_tctx_get large_prof_tctx_get

View File

@ -76,7 +76,11 @@ large_dalloc_junk(void *ptr, size_t usize)
large_dalloc_junk_t *large_dalloc_junk = JEMALLOC_N(n_large_dalloc_junk); large_dalloc_junk_t *large_dalloc_junk = JEMALLOC_N(n_large_dalloc_junk);
#endif #endif
static void #ifdef JEMALLOC_JET
#undef large_dalloc_maybe_junk
#define large_dalloc_maybe_junk JEMALLOC_N(n_large_dalloc_maybe_junk)
#endif
void
large_dalloc_maybe_junk(tsdn_t *tsdn, void *ptr, size_t usize) large_dalloc_maybe_junk(tsdn_t *tsdn, void *ptr, size_t usize)
{ {
@ -87,9 +91,14 @@ large_dalloc_maybe_junk(tsdn_t *tsdn, void *ptr, size_t usize)
*/ */
if (!config_munmap || (have_dss && extent_in_dss(tsdn, ptr))) if (!config_munmap || (have_dss && extent_in_dss(tsdn, ptr)))
large_dalloc_junk(ptr, usize); large_dalloc_junk(ptr, usize);
memset(ptr, JEMALLOC_FREE_JUNK, usize);
} }
} }
#ifdef JEMALLOC_JET
#undef large_dalloc_maybe_junk
#define large_dalloc_maybe_junk JEMALLOC_N(large_dalloc_maybe_junk)
large_dalloc_maybe_junk_t *large_dalloc_maybe_junk =
JEMALLOC_N(n_large_dalloc_maybe_junk);
#endif
static bool static bool
large_ralloc_no_move_shrink(tsdn_t *tsdn, extent_t *extent, size_t usize) large_ralloc_no_move_shrink(tsdn_t *tsdn, extent_t *extent, size_t usize)

View File

@ -10,6 +10,7 @@ const char *malloc_conf =
static arena_dalloc_junk_small_t *arena_dalloc_junk_small_orig; static arena_dalloc_junk_small_t *arena_dalloc_junk_small_orig;
static large_dalloc_junk_t *large_dalloc_junk_orig; static large_dalloc_junk_t *large_dalloc_junk_orig;
static large_dalloc_maybe_junk_t *large_dalloc_maybe_junk_orig;
static void *watch_for_junking; static void *watch_for_junking;
static bool saw_junking; static bool saw_junking;
@ -39,13 +40,23 @@ arena_dalloc_junk_small_intercept(void *ptr, const arena_bin_info_t *bin_info)
static void static void
large_dalloc_junk_intercept(void *ptr, size_t usize) large_dalloc_junk_intercept(void *ptr, size_t usize)
{ {
size_t i;
large_dalloc_junk_orig(ptr, usize); large_dalloc_junk_orig(ptr, usize);
/* for (i = 0; i < usize; i++) {
* The conditions under which junk filling actually occurs are nuanced assert_u_eq(((uint8_t *)ptr)[i], JEMALLOC_FREE_JUNK,
* enough that it doesn't make sense to duplicate the decision logic in "Missing junk fill for byte %zu/%zu of deallocated region",
* test code, so don't actually check that the region is junk-filled. i, usize);
*/ }
if (ptr == watch_for_junking)
saw_junking = true;
}
static void
large_dalloc_maybe_junk_intercept(tsdn_t *tsdn, void *ptr, size_t usize)
{
large_dalloc_maybe_junk_orig(tsdn, ptr, usize);
if (ptr == watch_for_junking) if (ptr == watch_for_junking)
saw_junking = true; saw_junking = true;
} }
@ -61,6 +72,8 @@ test_junk(size_t sz_min, size_t sz_max)
arena_dalloc_junk_small = arena_dalloc_junk_small_intercept; arena_dalloc_junk_small = arena_dalloc_junk_small_intercept;
large_dalloc_junk_orig = large_dalloc_junk; large_dalloc_junk_orig = large_dalloc_junk;
large_dalloc_junk = large_dalloc_junk_intercept; large_dalloc_junk = large_dalloc_junk_intercept;
large_dalloc_maybe_junk_orig = large_dalloc_maybe_junk;
large_dalloc_maybe_junk = large_dalloc_maybe_junk_intercept;
} }
sz_prev = 0; sz_prev = 0;
@ -111,6 +124,7 @@ test_junk(size_t sz_min, size_t sz_max)
if (opt_junk_free) { if (opt_junk_free) {
arena_dalloc_junk_small = arena_dalloc_junk_small_orig; arena_dalloc_junk_small = arena_dalloc_junk_small_orig;
large_dalloc_junk = large_dalloc_junk_orig; large_dalloc_junk = large_dalloc_junk_orig;
large_dalloc_maybe_junk = large_dalloc_maybe_junk_orig;
} }
} }