Lines Matching refs:tctx

124 static bool	prof_tctx_should_destroy(tsdn_t *tsdn, prof_tctx_t *tctx);
125 static void prof_tctx_destroy(tsd_t *tsd, prof_tctx_t *tctx);
197 prof_alloc_rollback(tsd_t *tsd, prof_tctx_t *tctx, bool updated)
215 if ((uintptr_t)tctx > (uintptr_t)1U) {
216 malloc_mutex_lock(tsd_tsdn(tsd), tctx->tdata->lock);
217 tctx->prepared = false;
218 if (prof_tctx_should_destroy(tsd_tsdn(tsd), tctx))
219 prof_tctx_destroy(tsd, tctx);
221 malloc_mutex_unlock(tsd_tsdn(tsd), tctx->tdata->lock);
227 prof_tctx_t *tctx)
230 prof_tctx_set(tsdn, ptr, usize, tctx);
232 malloc_mutex_lock(tsdn, tctx->tdata->lock);
233 tctx->cnts.curobjs++;
234 tctx->cnts.curbytes += usize;
236 tctx->cnts.accumobjs++;
237 tctx->cnts.accumbytes += usize;
239 tctx->prepared = false;
240 malloc_mutex_unlock(tsdn, tctx->tdata->lock);
244 prof_free_sampled_object(tsd_t *tsd, size_t usize, prof_tctx_t *tctx)
247 malloc_mutex_lock(tsd_tsdn(tsd), tctx->tdata->lock);
248 assert(tctx->cnts.curobjs > 0);
249 assert(tctx->cnts.curbytes >= usize);
250 tctx->cnts.curobjs--;
251 tctx->cnts.curbytes -= usize;
253 if (prof_tctx_should_destroy(tsd_tsdn(tsd), tctx))
254 prof_tctx_destroy(tsd, tctx);
256 malloc_mutex_unlock(tsd_tsdn(tsd), tctx->tdata->lock);
612 prof_tctx_should_destroy(tsdn_t *tsdn, prof_tctx_t *tctx)
615 malloc_mutex_assert_owner(tsdn, tctx->tdata->lock);
619 if (tctx->cnts.curobjs != 0)
621 if (tctx->prepared)
640 prof_tctx_destroy(tsd_t *tsd, prof_tctx_t *tctx)
642 prof_tdata_t *tdata = tctx->tdata;
643 prof_gctx_t *gctx = tctx->gctx;
646 malloc_mutex_assert_owner(tsd_tsdn(tsd), tctx->tdata->lock);
648 assert(tctx->cnts.curobjs == 0);
649 assert(tctx->cnts.curbytes == 0);
651 assert(tctx->cnts.accumobjs == 0);
652 assert(tctx->cnts.accumbytes == 0);
659 switch (tctx->state) {
661 tctx_tree_remove(&gctx->tctxs, tctx);
685 * A dumping thread needs tctx to remain valid until dumping
689 tctx->state = prof_tctx_state_purgatory;
704 malloc_mutex_assert_not_owner(tsd_tsdn(tsd), tctx->tdata->lock);
710 idalloctm(tsd_tsdn(tsd), tctx, NULL, true, true);
1042 prof_tctx_merge_tdata(tsdn_t *tsdn, prof_tctx_t *tctx, prof_tdata_t *tdata)
1045 malloc_mutex_assert_owner(tsdn, tctx->tdata->lock);
1047 malloc_mutex_lock(tsdn, tctx->gctx->lock);
1049 switch (tctx->state) {
1051 malloc_mutex_unlock(tsdn, tctx->gctx->lock);
1054 tctx->state = prof_tctx_state_dumping;
1055 malloc_mutex_unlock(tsdn, tctx->gctx->lock);
1057 memcpy(&tctx->dump_cnts, &tctx->cnts, sizeof(prof_cnt_t));
1059 tdata->cnt_summed.curobjs += tctx->dump_cnts.curobjs;
1060 tdata->cnt_summed.curbytes += tctx->dump_cnts.curbytes;
1063 tctx->dump_cnts.accumobjs;
1065 tctx->dump_cnts.accumbytes;
1075 prof_tctx_merge_gctx(tsdn_t *tsdn, prof_tctx_t *tctx, prof_gctx_t *gctx)
1080 gctx->cnt_summed.curobjs += tctx->dump_cnts.curobjs;
1081 gctx->cnt_summed.curbytes += tctx->dump_cnts.curbytes;
1083 gctx->cnt_summed.accumobjs += tctx->dump_cnts.accumobjs;
1084 gctx->cnt_summed.accumbytes += tctx->dump_cnts.accumbytes;
1089 prof_tctx_merge_iter(prof_tctx_tree_t *tctxs, prof_tctx_t *tctx, void *arg)
1093 malloc_mutex_assert_owner(tsdn, tctx->gctx->lock);
1095 switch (tctx->state) {
1101 prof_tctx_merge_gctx(tsdn, tctx, tctx->gctx);
1116 prof_tctx_dump_iter(prof_tctx_tree_t *tctxs, prof_tctx_t *tctx, void *opaque)
1121 malloc_mutex_assert_owner(arg->tsdn, tctx->gctx->lock);
1123 switch (tctx->state) {
1132 "%"FMTu64"]\n", tctx->thr_uid, tctx->dump_cnts.curobjs,
1133 tctx->dump_cnts.curbytes, tctx->dump_cnts.accumobjs,
1134 tctx->dump_cnts.accumbytes))
1135 return (tctx);
1144 prof_tctx_finish_iter(prof_tctx_tree_t *tctxs, prof_tctx_t *tctx, void *arg)
1149 malloc_mutex_assert_owner(tsdn, tctx->gctx->lock);
1151 switch (tctx->state) {
1156 tctx->state = prof_tctx_state_nominal;
1159 ret = tctx;
1275 } tctx;
1280 &tctx.v);)
1281 prof_tctx_merge_tdata(arg->tsdn, tctx.p, tdata);
1577 * Iterate over tdatas, and for the non-expired ones snapshot their tctx
1587 /* Merge tctx stats into gctx's. */