Lines Matching refs:tdata
126 static bool prof_tdata_should_destroy(tsdn_t *tsdn, 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(tsd_tsdn(tsd), tctx->tdata->lock); in rb_gen()
221 malloc_mutex_unlock(tsd_tsdn(tsd), tctx->tdata->lock); in rb_gen()
231 malloc_mutex_lock(tsdn, tctx->tdata->lock); in prof_malloc_sample_object()
239 malloc_mutex_unlock(tsdn, tctx->tdata->lock); in prof_malloc_sample_object()
245 malloc_mutex_lock(tsd_tsdn(tsd), tctx->tdata->lock); in prof_free_sampled_object()
254 malloc_mutex_unlock(tsd_tsdn(tsd), tctx->tdata->lock); in prof_free_sampled_object()
267 prof_enter(tsd_t *tsd, prof_tdata_t *tdata) in prof_enter() argument
270 assert(tdata == prof_tdata_get(tsd, false)); in prof_enter()
272 if (tdata != NULL) { in prof_enter()
273 assert(!tdata->enq); in prof_enter()
274 tdata->enq = true; in prof_enter()
281 prof_leave(tsd_t *tsd, prof_tdata_t *tdata) in prof_leave() argument
284 assert(tdata == prof_tdata_get(tsd, false)); in prof_leave()
288 if (tdata != NULL) { in prof_leave()
291 assert(tdata->enq); in prof_leave()
292 tdata->enq = false; in prof_leave()
293 idump = tdata->enq_idump; in prof_leave()
294 tdata->enq_idump = false; in prof_leave()
295 gdump = tdata->enq_gdump; in prof_leave()
296 tdata->enq_gdump = false; in prof_leave()
569 prof_tdata_t *tdata) in prof_gctx_try_destroy()
606 malloc_mutex_assert_owner(tsdn, tctx->tdata->lock); in prof_tctx_should_destroy()
632 prof_tdata_t *tdata = tctx->tdata; in prof_tctx_destroy() local
636 malloc_mutex_assert_owner(tsd_tsdn(tsd), tctx->tdata->lock); in prof_tctx_destroy()
644 ckh_remove(tsd, &tdata->bt2tctx, &gctx->bt, NULL, NULL); in prof_tctx_destroy()
645 destroy_tdata = prof_tdata_should_destroy(tsd_tsdn(tsd), tdata, false); in prof_tctx_destroy()
646 malloc_mutex_unlock(tsd_tsdn(tsd), tdata->lock); in prof_tctx_destroy()
691 tdata); in prof_tctx_destroy()
694 malloc_mutex_assert_not_owner(tsd_tsdn(tsd), tctx->tdata->lock); in prof_tctx_destroy()
697 prof_tdata_destroy(tsd, tdata, false); in prof_tctx_destroy()
705 prof_lookup_global(tsd_t *tsd, prof_bt_t *bt, prof_tdata_t *tdata, in prof_lookup_global() argument
718 prof_enter(tsd, tdata); in prof_lookup_global()
723 prof_leave(tsd, tdata); in prof_lookup_global()
729 prof_leave(tsd, tdata); in prof_lookup_global()
745 prof_leave(tsd, tdata); in prof_lookup_global()
760 prof_tdata_t *tdata; in prof_lookup() local
765 tdata = prof_tdata_get(tsd, false); in prof_lookup()
766 if (tdata == NULL) in prof_lookup()
769 malloc_mutex_lock(tsd_tsdn(tsd), tdata->lock); in prof_lookup()
770 not_found = ckh_search(&tdata->bt2tctx, bt, NULL, &ret.v); in prof_lookup()
773 malloc_mutex_unlock(tsd_tsdn(tsd), tdata->lock); in prof_lookup()
783 if (prof_lookup_global(tsd, bt, tdata, &btkey, &gctx, in prof_lookup()
793 prof_gctx_try_destroy(tsd, tdata, gctx, tdata); in prof_lookup()
796 ret.p->tdata = tdata; in prof_lookup()
797 ret.p->thr_uid = tdata->thr_uid; in prof_lookup()
798 ret.p->thr_discrim = tdata->thr_discrim; in prof_lookup()
801 ret.p->tctx_uid = tdata->tctx_uid_next++; in prof_lookup()
804 malloc_mutex_lock(tsd_tsdn(tsd), tdata->lock); in prof_lookup()
805 error = ckh_insert(tsd, &tdata->bt2tctx, btkey, ret.v); in prof_lookup()
806 malloc_mutex_unlock(tsd_tsdn(tsd), tdata->lock); in prof_lookup()
809 prof_gctx_try_destroy(tsd, tdata, gctx, tdata); in prof_lookup()
838 prof_sample_threshold_update(prof_tdata_t *tdata) in prof_sample_threshold_update() argument
848 tdata->bytes_until_sample = 0; in prof_sample_threshold_update()
870 r = prng_lg_range_u64(&tdata->prng_state, 53); in prof_sample_threshold_update()
872 tdata->bytes_until_sample = (uint64_t)(log(u) / in prof_sample_threshold_update()
880 prof_tdata_count_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, void *arg) in prof_tdata_count_iter() argument
911 prof_tdata_t *tdata; in prof_bt_count() local
914 tdata = prof_tdata_get(tsd, false); in prof_bt_count()
915 if (tdata == NULL) in prof_bt_count()
1034 prof_tctx_merge_tdata(tsdn_t *tsdn, prof_tctx_t *tctx, prof_tdata_t *tdata) in prof_tctx_merge_tdata() argument
1036 malloc_mutex_assert_owner(tsdn, tctx->tdata->lock); in prof_tctx_merge_tdata()
1050 tdata->cnt_summed.curobjs += tctx->dump_cnts.curobjs; in prof_tctx_merge_tdata()
1051 tdata->cnt_summed.curbytes += tctx->dump_cnts.curbytes; in prof_tctx_merge_tdata()
1053 tdata->cnt_summed.accumobjs += in prof_tctx_merge_tdata()
1055 tdata->cnt_summed.accumbytes += in prof_tctx_merge_tdata()
1204 prof_tdata_t *tdata = prof_tdata_get(tsd, false); in prof_gctx_finish() local
1241 prof_gctx_try_destroy(tsd, tdata, gctx, tdata); in prof_gctx_finish()
1253 prof_tdata_merge_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, in prof_tdata_merge_iter() argument
1259 malloc_mutex_lock(arg->tsdn, tdata->lock); in prof_tdata_merge_iter()
1260 if (!tdata->expired) { in prof_tdata_merge_iter()
1267 tdata->dumping = true; in prof_tdata_merge_iter()
1268 memset(&tdata->cnt_summed, 0, sizeof(prof_cnt_t)); in prof_tdata_merge_iter()
1269 for (tabind = 0; !ckh_iter(&tdata->bt2tctx, &tabind, NULL, in prof_tdata_merge_iter()
1271 prof_tctx_merge_tdata(arg->tsdn, tctx.p, tdata); in prof_tdata_merge_iter()
1273 arg->cnt_all.curobjs += tdata->cnt_summed.curobjs; in prof_tdata_merge_iter()
1274 arg->cnt_all.curbytes += tdata->cnt_summed.curbytes; in prof_tdata_merge_iter()
1276 arg->cnt_all.accumobjs += tdata->cnt_summed.accumobjs; in prof_tdata_merge_iter()
1277 arg->cnt_all.accumbytes += tdata->cnt_summed.accumbytes; in prof_tdata_merge_iter()
1280 tdata->dumping = false; in prof_tdata_merge_iter()
1281 malloc_mutex_unlock(arg->tsdn, tdata->lock); in prof_tdata_merge_iter()
1287 prof_tdata_dump_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, void *arg) in prof_tdata_dump_iter() argument
1291 if (!tdata->dumping) in prof_tdata_dump_iter()
1296 tdata->thr_uid, tdata->cnt_summed.curobjs, in prof_tdata_dump_iter()
1297 tdata->cnt_summed.curbytes, tdata->cnt_summed.accumobjs, in prof_tdata_dump_iter()
1298 tdata->cnt_summed.accumbytes, in prof_tdata_dump_iter()
1299 (tdata->thread_name != NULL) ? " " : "", in prof_tdata_dump_iter()
1300 (tdata->thread_name != NULL) ? tdata->thread_name : "")) in prof_tdata_dump_iter()
1301 return (tdata); in prof_tdata_dump_iter()
1534 prof_dump_prep(tsd_t *tsd, prof_tdata_t *tdata, in prof_dump_prep() argument
1545 prof_enter(tsd, tdata); in prof_dump_prep()
1573 prof_leave(tsd, tdata); in prof_dump_prep()
1578 bool leakcheck, prof_tdata_t *tdata, in prof_dump_file() argument
1621 prof_tdata_t *tdata; in prof_dump() local
1630 tdata = prof_tdata_get(tsd, true); in prof_dump()
1631 if (tdata == NULL) { in prof_dump()
1637 prof_dump_prep(tsd, tdata, &prof_tdata_merge_iter_arg, in prof_dump()
1639 err = prof_dump_file(tsd, propagate_err, filename, leakcheck, tdata, in prof_dump()
1663 prof_tdata_t *tdata; in prof_cnt_all() local
1669 tdata = prof_tdata_get(tsd, false); in prof_cnt_all()
1670 if (tdata == NULL) { in prof_cnt_all()
1686 prof_dump_prep(tsd, tdata, &prof_tdata_merge_iter_arg, in prof_cnt_all()
1750 prof_tdata_t *tdata; in prof_idump() local
1757 tdata = prof_tdata_get(tsd, false); in prof_idump()
1758 if (tdata == NULL) in prof_idump()
1760 if (tdata->enq) { in prof_idump()
1761 tdata->enq_idump = true; in prof_idump()
1802 prof_tdata_t *tdata; in prof_gdump() local
1809 tdata = prof_tdata_get(tsd, false); in prof_gdump()
1810 if (tdata == NULL) in prof_gdump()
1812 if (tdata->enq) { in prof_gdump()
1813 tdata->enq_gdump = true; in prof_gdump()
1867 prof_tdata_t *tdata; in prof_tdata_init_impl() local
1872 tdata = (prof_tdata_t *)iallocztm(tsd_tsdn(tsd), sizeof(prof_tdata_t), in prof_tdata_init_impl()
1875 if (tdata == NULL) in prof_tdata_init_impl()
1878 tdata->lock = prof_tdata_mutex_choose(thr_uid); in prof_tdata_init_impl()
1879 tdata->thr_uid = thr_uid; in prof_tdata_init_impl()
1880 tdata->thr_discrim = thr_discrim; in prof_tdata_init_impl()
1881 tdata->thread_name = thread_name; in prof_tdata_init_impl()
1882 tdata->attached = true; in prof_tdata_init_impl()
1883 tdata->expired = false; in prof_tdata_init_impl()
1884 tdata->tctx_uid_next = 0; in prof_tdata_init_impl()
1886 if (ckh_new(tsd, &tdata->bt2tctx, PROF_CKH_MINITEMS, prof_bt_hash, in prof_tdata_init_impl()
1888 idalloctm(tsd_tsdn(tsd), iealloc(tsd_tsdn(tsd), tdata), tdata, in prof_tdata_init_impl()
1893 tdata->prng_state = (uint64_t)(uintptr_t)tdata; in prof_tdata_init_impl()
1894 prof_sample_threshold_update(tdata); in prof_tdata_init_impl()
1896 tdata->enq = false; in prof_tdata_init_impl()
1897 tdata->enq_idump = false; in prof_tdata_init_impl()
1898 tdata->enq_gdump = false; in prof_tdata_init_impl()
1900 tdata->dumping = false; in prof_tdata_init_impl()
1901 tdata->active = active; in prof_tdata_init_impl()
1904 tdata_tree_insert(&tdatas, tdata); in prof_tdata_init_impl()
1907 return (tdata); in prof_tdata_init_impl()
1918 prof_tdata_should_destroy_unlocked(prof_tdata_t *tdata, bool even_if_attached) in prof_tdata_should_destroy_unlocked() argument
1920 if (tdata->attached && !even_if_attached) in prof_tdata_should_destroy_unlocked()
1922 if (ckh_count(&tdata->bt2tctx) != 0) in prof_tdata_should_destroy_unlocked()
1928 prof_tdata_should_destroy(tsdn_t *tsdn, prof_tdata_t *tdata, in prof_tdata_should_destroy() argument
1931 malloc_mutex_assert_owner(tsdn, tdata->lock); in prof_tdata_should_destroy()
1933 return (prof_tdata_should_destroy_unlocked(tdata, even_if_attached)); in prof_tdata_should_destroy()
1937 prof_tdata_destroy_locked(tsd_t *tsd, prof_tdata_t *tdata, in prof_tdata_destroy_locked() argument
1942 tdata_tree_remove(&tdatas, tdata); in prof_tdata_destroy_locked()
1944 assert(prof_tdata_should_destroy_unlocked(tdata, even_if_attached)); in prof_tdata_destroy_locked()
1946 if (tdata->thread_name != NULL) { in prof_tdata_destroy_locked()
1948 tdata->thread_name), tdata->thread_name, NULL, true, true); in prof_tdata_destroy_locked()
1950 ckh_delete(tsd, &tdata->bt2tctx); in prof_tdata_destroy_locked()
1951 idalloctm(tsd_tsdn(tsd), iealloc(tsd_tsdn(tsd), tdata), tdata, NULL, in prof_tdata_destroy_locked()
1956 prof_tdata_destroy(tsd_t *tsd, prof_tdata_t *tdata, bool even_if_attached) in prof_tdata_destroy() argument
1959 prof_tdata_destroy_locked(tsd, tdata, even_if_attached); in prof_tdata_destroy()
1964 prof_tdata_detach(tsd_t *tsd, prof_tdata_t *tdata) in prof_tdata_detach() argument
1968 malloc_mutex_lock(tsd_tsdn(tsd), tdata->lock); in prof_tdata_detach()
1969 if (tdata->attached) { in prof_tdata_detach()
1970 destroy_tdata = prof_tdata_should_destroy(tsd_tsdn(tsd), tdata, in prof_tdata_detach()
1977 tdata->attached = false; in prof_tdata_detach()
1981 malloc_mutex_unlock(tsd_tsdn(tsd), tdata->lock); in prof_tdata_detach()
1983 prof_tdata_destroy(tsd, tdata, true); in prof_tdata_detach()
1987 prof_tdata_reinit(tsd_t *tsd, prof_tdata_t *tdata) in prof_tdata_reinit() argument
1989 uint64_t thr_uid = tdata->thr_uid; in prof_tdata_reinit()
1990 uint64_t thr_discrim = tdata->thr_discrim + 1; in prof_tdata_reinit()
1991 char *thread_name = (tdata->thread_name != NULL) ? in prof_tdata_reinit()
1992 prof_thread_name_alloc(tsd_tsdn(tsd), tdata->thread_name) : NULL; in prof_tdata_reinit()
1993 bool active = tdata->active; in prof_tdata_reinit()
1995 prof_tdata_detach(tsd, tdata); in prof_tdata_reinit()
2001 prof_tdata_expire(tsdn_t *tsdn, prof_tdata_t *tdata) in prof_tdata_expire() argument
2005 malloc_mutex_lock(tsdn, tdata->lock); in prof_tdata_expire()
2006 if (!tdata->expired) { in prof_tdata_expire()
2007 tdata->expired = true; in prof_tdata_expire()
2008 destroy_tdata = tdata->attached ? false : in prof_tdata_expire()
2009 prof_tdata_should_destroy(tsdn, tdata, false); in prof_tdata_expire()
2012 malloc_mutex_unlock(tsdn, tdata->lock); in prof_tdata_expire()
2018 prof_tdata_reset_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, void *arg) in prof_tdata_reset_iter() argument
2022 return (prof_tdata_expire(tsdn, tdata) ? tdata : NULL); in prof_tdata_reset_iter()
2055 prof_tdata_t *tdata; in prof_tdata_cleanup() local
2060 tdata = tsd_prof_tdata_get(tsd); in prof_tdata_cleanup()
2061 if (tdata != NULL) in prof_tdata_cleanup()
2062 prof_tdata_detach(tsd, tdata); in prof_tdata_cleanup()
2091 prof_tdata_t *tdata; in prof_thread_name_get() local
2093 tdata = prof_tdata_get(tsd, true); in prof_thread_name_get()
2094 if (tdata == NULL) in prof_thread_name_get()
2096 return (tdata->thread_name != NULL ? tdata->thread_name : ""); in prof_thread_name_get()
2123 prof_tdata_t *tdata; in prof_thread_name_set() local
2127 tdata = prof_tdata_get(tsd, true); in prof_thread_name_set()
2128 if (tdata == NULL) in prof_thread_name_set()
2144 if (tdata->thread_name != NULL) { in prof_thread_name_set()
2146 tdata->thread_name), tdata->thread_name, NULL, true, true); in prof_thread_name_set()
2147 tdata->thread_name = NULL; in prof_thread_name_set()
2150 tdata->thread_name = s; in prof_thread_name_set()
2157 prof_tdata_t *tdata; in prof_thread_active_get() local
2159 tdata = prof_tdata_get(tsd, true); in prof_thread_active_get()
2160 if (tdata == NULL) in prof_thread_active_get()
2162 return (tdata->active); in prof_thread_active_get()
2168 prof_tdata_t *tdata; in prof_thread_active_set() local
2170 tdata = prof_tdata_get(tsd, true); in prof_thread_active_set()
2171 if (tdata == NULL) in prof_thread_active_set()
2173 tdata->active = active; in prof_thread_active_set()