Test and fix tcache ID recycling.

This commit is contained in:
Jason Evans 2015-02-10 09:03:48 -08:00
parent 1cb181ed63
commit 9e561e8d3f
2 changed files with 13 additions and 1 deletions

View File

@ -451,7 +451,7 @@ tcaches_create(tsd_t *tsd, unsigned *r_ind)
elm = tcaches_avail; elm = tcaches_avail;
tcaches_avail = tcaches_avail->next; tcaches_avail = tcaches_avail->next;
elm->tcache = tcache; elm->tcache = tcache;
*r_ind = (elm - tcaches) / sizeof(tcaches_t); *r_ind = elm - tcaches;
} else { } else {
elm = &tcaches[tcaches_past]; elm = &tcaches[tcaches_past];
elm->tcache = tcache; elm->tcache = tcache;

View File

@ -258,6 +258,18 @@ TEST_BEGIN(test_tcache)
"Unexpected mallctl() failure, i=%u", i); "Unexpected mallctl() failure, i=%u", i);
} }
/* Exercise tcache ID recycling. */
for (i = 0; i < NTCACHES; i++) {
assert_d_eq(mallctl("tcache.destroy", NULL, NULL, &tis[i],
sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u",
i);
}
for (i = 0; i < NTCACHES; i++) {
sz = sizeof(unsigned);
assert_d_eq(mallctl("tcache.create", &tis[i], &sz, NULL, 0), 0,
"Unexpected mallctl() failure, i=%u", i);
}
/* Flush empty tcaches. */ /* Flush empty tcaches. */
for (i = 0; i < NTCACHES; i++) { for (i = 0; i < NTCACHES; i++) {
assert_d_eq(mallctl("tcache.flush", NULL, NULL, &tis[i], assert_d_eq(mallctl("tcache.flush", NULL, NULL, &tis[i],