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 size_t usize, prof_tctx_t *tctx)
229 prof_tctx_set(tsdn, extent, ptr, usize, tctx);
231 malloc_mutex_lock(tsdn, tctx->tdata->lock);
232 tctx->cnts.curobjs++;
233 tctx->cnts.curbytes += usize;
235 tctx->cnts.accumobjs++;
236 tctx->cnts.accumbytes += usize;
238 tctx->prepared = false;
239 malloc_mutex_unlock(tsdn, tctx->tdata->lock);
243 prof_free_sampled_object(tsd_t *tsd, size_t usize, prof_tctx_t *tctx)
245 malloc_mutex_lock(tsd_tsdn(tsd), tctx->tdata->lock);
246 assert(tctx->cnts.curobjs > 0);
247 assert(tctx->cnts.curbytes >= usize);
248 tctx->cnts.curobjs--;
249 tctx->cnts.curbytes -= usize;
251 if (prof_tctx_should_destroy(tsd_tsdn(tsd), tctx))
252 prof_tctx_destroy(tsd, tctx);
254 malloc_mutex_unlock(tsd_tsdn(tsd), tctx->tdata->lock);
604 prof_tctx_should_destroy(tsdn_t *tsdn, prof_tctx_t *tctx)
606 malloc_mutex_assert_owner(tsdn, tctx->tdata->lock);
610 if (tctx->cnts.curobjs != 0)
612 if (tctx->prepared)
630 prof_tctx_destroy(tsd_t *tsd, prof_tctx_t *tctx)
632 prof_tdata_t *tdata = tctx->tdata;
633 prof_gctx_t *gctx = tctx->gctx;
636 malloc_mutex_assert_owner(tsd_tsdn(tsd), tctx->tdata->lock);
638 assert(tctx->cnts.curobjs == 0);
639 assert(tctx->cnts.curbytes == 0);
641 assert(tctx->cnts.accumobjs == 0);
642 assert(tctx->cnts.accumbytes == 0);
649 switch (tctx->state) {
651 tctx_tree_remove(&gctx->tctxs, tctx);
675 * A dumping thread needs tctx to remain valid until dumping
679 tctx->state = prof_tctx_state_purgatory;
694 malloc_mutex_assert_not_owner(tsd_tsdn(tsd), tctx->tdata->lock);
700 idalloctm(tsd_tsdn(tsd), iealloc(tsd_tsdn(tsd), tctx), tctx,
1034 prof_tctx_merge_tdata(tsdn_t *tsdn, prof_tctx_t *tctx, prof_tdata_t *tdata)
1036 malloc_mutex_assert_owner(tsdn, tctx->tdata->lock);
1038 malloc_mutex_lock(tsdn, tctx->gctx->lock);
1040 switch (tctx->state) {
1042 malloc_mutex_unlock(tsdn, tctx->gctx->lock);
1045 tctx->state = prof_tctx_state_dumping;
1046 malloc_mutex_unlock(tsdn, tctx->gctx->lock);
1048 memcpy(&tctx->dump_cnts, &tctx->cnts, sizeof(prof_cnt_t));
1050 tdata->cnt_summed.curobjs += tctx->dump_cnts.curobjs;
1051 tdata->cnt_summed.curbytes += tctx->dump_cnts.curbytes;
1054 tctx->dump_cnts.accumobjs;
1056 tctx->dump_cnts.accumbytes;
1066 prof_tctx_merge_gctx(tsdn_t *tsdn, prof_tctx_t *tctx, prof_gctx_t *gctx)
1070 gctx->cnt_summed.curobjs += tctx->dump_cnts.curobjs;
1071 gctx->cnt_summed.curbytes += tctx->dump_cnts.curbytes;
1073 gctx->cnt_summed.accumobjs += tctx->dump_cnts.accumobjs;
1074 gctx->cnt_summed.accumbytes += tctx->dump_cnts.accumbytes;
1079 prof_tctx_merge_iter(prof_tctx_tree_t *tctxs, prof_tctx_t *tctx, void *arg)
1083 malloc_mutex_assert_owner(tsdn, tctx->gctx->lock);
1085 switch (tctx->state) {
1091 prof_tctx_merge_gctx(tsdn, tctx, tctx->gctx);
1106 prof_tctx_dump_iter(prof_tctx_tree_t *tctxs, prof_tctx_t *tctx, void *opaque)
1111 malloc_mutex_assert_owner(arg->tsdn, tctx->gctx->lock);
1113 switch (tctx->state) {
1122 "%"FMTu64"]\n", tctx->thr_uid, tctx->dump_cnts.curobjs,
1123 tctx->dump_cnts.curbytes, tctx->dump_cnts.accumobjs,
1124 tctx->dump_cnts.accumbytes))
1125 return (tctx);
1134 prof_tctx_finish_iter(prof_tctx_tree_t *tctxs, prof_tctx_t *tctx, void *arg)
1139 malloc_mutex_assert_owner(tsdn, tctx->gctx->lock);
1141 switch (tctx->state) {
1146 tctx->state = prof_tctx_state_nominal;
1149 ret = tctx;
1265 } tctx;
1270 &tctx.v);)
1271 prof_tctx_merge_tdata(arg->tsdn, tctx.p, tdata);
1557 * Iterate over tdatas, and for the non-expired ones snapshot their tctx
1567 /* Merge tctx stats into gctx's. */