2017-01-17 03:09:24 +08:00
|
|
|
#include "test/jemalloc_test.h"
|
|
|
|
|
|
|
|
#ifdef JEMALLOC_PROF
|
|
|
|
const char *malloc_conf = "prof:true,lg_prof_sample:0";
|
|
|
|
#endif
|
|
|
|
|
2017-01-16 08:56:30 +08:00
|
|
|
TEST_BEGIN(test_prof_realloc) {
|
2017-01-17 03:09:24 +08:00
|
|
|
tsdn_t *tsdn;
|
|
|
|
int flags;
|
|
|
|
void *p, *q;
|
|
|
|
extent_t *extent_p, *extent_q;
|
|
|
|
prof_tctx_t *tctx_p, *tctx_q;
|
|
|
|
uint64_t curobjs_0, curobjs_1, curobjs_2, curobjs_3;
|
|
|
|
|
|
|
|
test_skip_if(!config_prof);
|
|
|
|
|
|
|
|
tsdn = tsdn_fetch();
|
|
|
|
flags = MALLOCX_TCACHE_NONE;
|
|
|
|
|
|
|
|
prof_cnt_all(&curobjs_0, NULL, NULL, NULL);
|
|
|
|
p = mallocx(1024, flags);
|
|
|
|
assert_ptr_not_null(p, "Unexpected mallocx() failure");
|
|
|
|
extent_p = iealloc(tsdn, p);
|
|
|
|
assert_ptr_not_null(extent_p, "Unexpected iealloc() failure");
|
|
|
|
tctx_p = prof_tctx_get(tsdn, extent_p, p);
|
|
|
|
assert_ptr_ne(tctx_p, (prof_tctx_t *)(uintptr_t)1U,
|
|
|
|
"Expected valid tctx");
|
|
|
|
prof_cnt_all(&curobjs_1, NULL, NULL, NULL);
|
|
|
|
assert_u64_eq(curobjs_0 + 1, curobjs_1,
|
|
|
|
"Allocation should have increased sample size");
|
|
|
|
|
|
|
|
q = rallocx(p, 2048, flags);
|
|
|
|
assert_ptr_ne(p, q, "Expected move");
|
|
|
|
assert_ptr_not_null(p, "Unexpected rmallocx() failure");
|
|
|
|
extent_q = iealloc(tsdn, q);
|
|
|
|
assert_ptr_not_null(extent_q, "Unexpected iealloc() failure");
|
|
|
|
tctx_q = prof_tctx_get(tsdn, extent_q, q);
|
|
|
|
assert_ptr_ne(tctx_q, (prof_tctx_t *)(uintptr_t)1U,
|
|
|
|
"Expected valid tctx");
|
|
|
|
prof_cnt_all(&curobjs_2, NULL, NULL, NULL);
|
|
|
|
assert_u64_eq(curobjs_1, curobjs_2,
|
|
|
|
"Reallocation should not have changed sample size");
|
|
|
|
|
|
|
|
dallocx(q, flags);
|
|
|
|
prof_cnt_all(&curobjs_3, NULL, NULL, NULL);
|
|
|
|
assert_u64_eq(curobjs_0, curobjs_3,
|
|
|
|
"Sample size should have returned to base level");
|
|
|
|
}
|
|
|
|
TEST_END
|
|
|
|
|
|
|
|
int
|
2017-01-16 08:56:30 +08:00
|
|
|
main(void) {
|
2017-01-17 03:09:24 +08:00
|
|
|
return test(
|
|
|
|
test_prof_realloc);
|
|
|
|
}
|