Lines Matching refs:tdata

126 static bool	prof_tdata_should_destroy(prof_tdata_t *tdata,
128 static void prof_tdata_destroy(tsd_t *tsd, prof_tdata_t *tdata,
199 prof_tdata_t *tdata; in rb_gen() local
210 tdata = prof_tdata_get(tsd, true); in rb_gen()
211 if (tdata != NULL) in rb_gen()
212 prof_sample_threshold_update(tdata); in rb_gen()
216 malloc_mutex_lock(tctx->tdata->lock); in rb_gen()
221 malloc_mutex_unlock(tctx->tdata->lock); in rb_gen()
231 malloc_mutex_lock(tctx->tdata->lock); in prof_malloc_sample_object()
239 malloc_mutex_unlock(tctx->tdata->lock); in prof_malloc_sample_object()
246 malloc_mutex_lock(tctx->tdata->lock); in prof_free_sampled_object()
255 malloc_mutex_unlock(tctx->tdata->lock); in prof_free_sampled_object()
269 prof_enter(tsd_t *tsd, prof_tdata_t *tdata) in prof_enter() argument
273 assert(tdata == prof_tdata_get(tsd, false)); in prof_enter()
275 if (tdata != NULL) { in prof_enter()
276 assert(!tdata->enq); in prof_enter()
277 tdata->enq = true; in prof_enter()
284 prof_leave(tsd_t *tsd, prof_tdata_t *tdata) in prof_leave() argument
288 assert(tdata == prof_tdata_get(tsd, false)); in prof_leave()
292 if (tdata != NULL) { in prof_leave()
295 assert(tdata->enq); in prof_leave()
296 tdata->enq = false; in prof_leave()
297 idump = tdata->enq_idump; in prof_leave()
298 tdata->enq_idump = false; in prof_leave()
299 gdump = tdata->enq_gdump; in prof_leave()
300 tdata->enq_gdump = false; in prof_leave()
575 prof_tdata_t *tdata) in prof_gctx_try_destroy()
640 prof_tdata_t *tdata = tctx->tdata; in prof_tctx_destroy() local
650 ckh_remove(tsd, &tdata->bt2tctx, &gctx->bt, NULL, NULL); in prof_tctx_destroy()
651 destroy_tdata = prof_tdata_should_destroy(tdata, false); in prof_tctx_destroy()
652 malloc_mutex_unlock(tdata->lock); in prof_tctx_destroy()
697 tdata); in prof_tctx_destroy()
701 prof_tdata_destroy(tsd, tdata, false); in prof_tctx_destroy()
708 prof_lookup_global(tsd_t *tsd, prof_bt_t *bt, prof_tdata_t *tdata, in prof_lookup_global() argument
721 prof_enter(tsd, tdata); in prof_lookup_global()
726 prof_leave(tsd, tdata); in prof_lookup_global()
732 prof_leave(tsd, tdata); in prof_lookup_global()
747 prof_leave(tsd, tdata); in prof_lookup_global()
762 prof_tdata_t *tdata; in prof_lookup() local
767 tdata = prof_tdata_get(tsd, false); in prof_lookup()
768 if (tdata == NULL) in prof_lookup()
771 malloc_mutex_lock(tdata->lock); in prof_lookup()
772 not_found = ckh_search(&tdata->bt2tctx, bt, NULL, &ret.v); in prof_lookup()
775 malloc_mutex_unlock(tdata->lock); in prof_lookup()
786 if (prof_lookup_global(tsd, bt, tdata, &btkey, &gctx, in prof_lookup()
796 prof_gctx_try_destroy(tsd, tdata, gctx, tdata); in prof_lookup()
799 ret.p->tdata = tdata; in prof_lookup()
800 ret.p->thr_uid = tdata->thr_uid; in prof_lookup()
801 ret.p->thr_discrim = tdata->thr_discrim; in prof_lookup()
804 ret.p->tctx_uid = tdata->tctx_uid_next++; in prof_lookup()
807 malloc_mutex_lock(tdata->lock); in prof_lookup()
808 error = ckh_insert(tsd, &tdata->bt2tctx, btkey, ret.v); in prof_lookup()
809 malloc_mutex_unlock(tdata->lock); in prof_lookup()
812 prof_gctx_try_destroy(tsd, tdata, gctx, tdata); in prof_lookup()
827 prof_sample_threshold_update(prof_tdata_t *tdata) in prof_sample_threshold_update() argument
850 tdata->bytes_until_sample = 0; in prof_sample_threshold_update()
872 prng64(r, 53, tdata->prng_state, UINT64_C(6364136223846793005), in prof_sample_threshold_update()
875 tdata->bytes_until_sample = (uint64_t)(log(u) / in prof_sample_threshold_update()
883 prof_tdata_count_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, void *arg) in prof_tdata_count_iter() argument
912 prof_tdata_t *tdata; in prof_bt_count() local
915 tdata = prof_tdata_get(tsd, false); in prof_bt_count()
916 if (tdata == NULL) in prof_bt_count()
1036 prof_tctx_merge_tdata(prof_tctx_t *tctx, prof_tdata_t *tdata) in prof_tctx_merge_tdata() argument
1051 tdata->cnt_summed.curobjs += tctx->dump_cnts.curobjs; in prof_tctx_merge_tdata()
1052 tdata->cnt_summed.curbytes += tctx->dump_cnts.curbytes; in prof_tctx_merge_tdata()
1054 tdata->cnt_summed.accumobjs += in prof_tctx_merge_tdata()
1056 tdata->cnt_summed.accumbytes += in prof_tctx_merge_tdata()
1188 prof_tdata_t *tdata = prof_tdata_get(tsd, false); in prof_gctx_finish() local
1223 prof_gctx_try_destroy(tsd, tdata, gctx, tdata); in prof_gctx_finish()
1230 prof_tdata_merge_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, void *arg) in prof_tdata_merge_iter() argument
1234 malloc_mutex_lock(tdata->lock); in prof_tdata_merge_iter()
1235 if (!tdata->expired) { in prof_tdata_merge_iter()
1242 tdata->dumping = true; in prof_tdata_merge_iter()
1243 memset(&tdata->cnt_summed, 0, sizeof(prof_cnt_t)); in prof_tdata_merge_iter()
1244 for (tabind = 0; !ckh_iter(&tdata->bt2tctx, &tabind, NULL, in prof_tdata_merge_iter()
1246 prof_tctx_merge_tdata(tctx.p, tdata); in prof_tdata_merge_iter()
1248 cnt_all->curobjs += tdata->cnt_summed.curobjs; in prof_tdata_merge_iter()
1249 cnt_all->curbytes += tdata->cnt_summed.curbytes; in prof_tdata_merge_iter()
1251 cnt_all->accumobjs += tdata->cnt_summed.accumobjs; in prof_tdata_merge_iter()
1252 cnt_all->accumbytes += tdata->cnt_summed.accumbytes; in prof_tdata_merge_iter()
1255 tdata->dumping = false; in prof_tdata_merge_iter()
1256 malloc_mutex_unlock(tdata->lock); in prof_tdata_merge_iter()
1262 prof_tdata_dump_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, void *arg) in prof_tdata_dump_iter() argument
1266 if (!tdata->dumping) in prof_tdata_dump_iter()
1271 tdata->thr_uid, tdata->cnt_summed.curobjs, in prof_tdata_dump_iter()
1272 tdata->cnt_summed.curbytes, tdata->cnt_summed.accumobjs, in prof_tdata_dump_iter()
1273 tdata->cnt_summed.accumbytes, in prof_tdata_dump_iter()
1274 (tdata->thread_name != NULL) ? " " : "", in prof_tdata_dump_iter()
1275 (tdata->thread_name != NULL) ? tdata->thread_name : "")) in prof_tdata_dump_iter()
1276 return (tdata); in prof_tdata_dump_iter()
1468 prof_tdata_t *tdata; in prof_dump() local
1480 tdata = prof_tdata_get(tsd, true); in prof_dump()
1481 if (tdata == NULL) in prof_dump()
1485 prof_enter(tsd, tdata); in prof_dump()
1508 prof_leave(tsd, tdata); in prof_dump()
1591 prof_tdata_t *tdata; in prof_idump() local
1598 tdata = prof_tdata_get(tsd, false); in prof_idump()
1599 if (tdata == NULL) in prof_idump()
1601 if (tdata->enq) { in prof_idump()
1602 tdata->enq_idump = true; in prof_idump()
1645 prof_tdata_t *tdata; in prof_gdump() local
1652 tdata = prof_tdata_get(tsd, false); in prof_gdump()
1653 if (tdata == NULL) in prof_gdump()
1655 if (tdata->enq) { in prof_gdump()
1656 tdata->enq_gdump = true; in prof_gdump()
1710 prof_tdata_t *tdata; in prof_tdata_init_impl() local
1717 tdata = (prof_tdata_t *)iallocztm(tsd, sizeof(prof_tdata_t), false, in prof_tdata_init_impl()
1719 if (tdata == NULL) in prof_tdata_init_impl()
1722 tdata->lock = prof_tdata_mutex_choose(thr_uid); in prof_tdata_init_impl()
1723 tdata->thr_uid = thr_uid; in prof_tdata_init_impl()
1724 tdata->thr_discrim = thr_discrim; in prof_tdata_init_impl()
1725 tdata->thread_name = thread_name; in prof_tdata_init_impl()
1726 tdata->attached = true; in prof_tdata_init_impl()
1727 tdata->expired = false; in prof_tdata_init_impl()
1728 tdata->tctx_uid_next = 0; in prof_tdata_init_impl()
1730 if (ckh_new(tsd, &tdata->bt2tctx, PROF_CKH_MINITEMS, in prof_tdata_init_impl()
1732 idalloctm(tsd, tdata, tcache, true); in prof_tdata_init_impl()
1736 tdata->prng_state = (uint64_t)(uintptr_t)tdata; in prof_tdata_init_impl()
1737 prof_sample_threshold_update(tdata); in prof_tdata_init_impl()
1739 tdata->enq = false; in prof_tdata_init_impl()
1740 tdata->enq_idump = false; in prof_tdata_init_impl()
1741 tdata->enq_gdump = false; in prof_tdata_init_impl()
1743 tdata->dumping = false; in prof_tdata_init_impl()
1744 tdata->active = active; in prof_tdata_init_impl()
1747 tdata_tree_insert(&tdatas, tdata); in prof_tdata_init_impl()
1750 return (tdata); in prof_tdata_init_impl()
1763 prof_tdata_should_destroy(prof_tdata_t *tdata, bool even_if_attached) in prof_tdata_should_destroy() argument
1766 if (tdata->attached && !even_if_attached) in prof_tdata_should_destroy()
1768 if (ckh_count(&tdata->bt2tctx) != 0) in prof_tdata_should_destroy()
1775 prof_tdata_destroy_locked(tsd_t *tsd, prof_tdata_t *tdata, in prof_tdata_destroy_locked() argument
1780 assert(prof_tdata_should_destroy(tdata, even_if_attached)); in prof_tdata_destroy_locked()
1781 assert(tsd_prof_tdata_get(tsd) != tdata); in prof_tdata_destroy_locked()
1783 tdata_tree_remove(&tdatas, tdata); in prof_tdata_destroy_locked()
1786 if (tdata->thread_name != NULL) in prof_tdata_destroy_locked()
1787 idalloctm(tsd, tdata->thread_name, tcache, true); in prof_tdata_destroy_locked()
1788 ckh_delete(tsd, &tdata->bt2tctx); in prof_tdata_destroy_locked()
1789 idalloctm(tsd, tdata, tcache, true); in prof_tdata_destroy_locked()
1793 prof_tdata_destroy(tsd_t *tsd, prof_tdata_t *tdata, bool even_if_attached) in prof_tdata_destroy() argument
1797 prof_tdata_destroy_locked(tsd, tdata, even_if_attached); in prof_tdata_destroy()
1802 prof_tdata_detach(tsd_t *tsd, prof_tdata_t *tdata) in prof_tdata_detach() argument
1806 malloc_mutex_lock(tdata->lock); in prof_tdata_detach()
1807 if (tdata->attached) { in prof_tdata_detach()
1808 destroy_tdata = prof_tdata_should_destroy(tdata, true); in prof_tdata_detach()
1814 tdata->attached = false; in prof_tdata_detach()
1818 malloc_mutex_unlock(tdata->lock); in prof_tdata_detach()
1820 prof_tdata_destroy(tsd, tdata, true); in prof_tdata_detach()
1824 prof_tdata_reinit(tsd_t *tsd, prof_tdata_t *tdata) in prof_tdata_reinit() argument
1826 uint64_t thr_uid = tdata->thr_uid; in prof_tdata_reinit()
1827 uint64_t thr_discrim = tdata->thr_discrim + 1; in prof_tdata_reinit()
1828 char *thread_name = (tdata->thread_name != NULL) ? in prof_tdata_reinit()
1829 prof_thread_name_alloc(tsd, tdata->thread_name) : NULL; in prof_tdata_reinit()
1830 bool active = tdata->active; in prof_tdata_reinit()
1832 prof_tdata_detach(tsd, tdata); in prof_tdata_reinit()
1838 prof_tdata_expire(prof_tdata_t *tdata) in prof_tdata_expire() argument
1842 malloc_mutex_lock(tdata->lock); in prof_tdata_expire()
1843 if (!tdata->expired) { in prof_tdata_expire()
1844 tdata->expired = true; in prof_tdata_expire()
1845 destroy_tdata = tdata->attached ? false : in prof_tdata_expire()
1846 prof_tdata_should_destroy(tdata, false); in prof_tdata_expire()
1849 malloc_mutex_unlock(tdata->lock); in prof_tdata_expire()
1855 prof_tdata_reset_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, void *arg) in prof_tdata_reset_iter() argument
1858 return (prof_tdata_expire(tdata) ? tdata : NULL); in prof_tdata_reset_iter()
1891 prof_tdata_t *tdata; in prof_tdata_cleanup() local
1896 tdata = tsd_prof_tdata_get(tsd); in prof_tdata_cleanup()
1897 if (tdata != NULL) in prof_tdata_cleanup()
1898 prof_tdata_detach(tsd, tdata); in prof_tdata_cleanup()
1928 prof_tdata_t *tdata; in prof_thread_name_get() local
1931 tdata = prof_tdata_get(tsd, true); in prof_thread_name_get()
1932 if (tdata == NULL) in prof_thread_name_get()
1934 return (tdata->thread_name != NULL ? tdata->thread_name : ""); in prof_thread_name_get()
1960 prof_tdata_t *tdata; in prof_thread_name_set() local
1964 tdata = prof_tdata_get(tsd, true); in prof_thread_name_set()
1965 if (tdata == NULL) in prof_thread_name_set()
1981 if (tdata->thread_name != NULL) { in prof_thread_name_set()
1982 idalloctm(tsd, tdata->thread_name, tcache_get(tsd, false), in prof_thread_name_set()
1984 tdata->thread_name = NULL; in prof_thread_name_set()
1987 tdata->thread_name = s; in prof_thread_name_set()
1995 prof_tdata_t *tdata; in prof_thread_active_get() local
1998 tdata = prof_tdata_get(tsd, true); in prof_thread_active_get()
1999 if (tdata == NULL) in prof_thread_active_get()
2001 return (tdata->active); in prof_thread_active_get()
2008 prof_tdata_t *tdata; in prof_thread_active_set() local
2011 tdata = prof_tdata_get(tsd, true); in prof_thread_active_set()
2012 if (tdata == NULL) in prof_thread_active_set()
2014 tdata->active = active; in prof_thread_active_set()