| 1538 | }; |
| 1539 | |
| 1540 | static prof_tdata_t * |
| 1541 | prof_tdata_merge_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, |
| 1542 | void *opaque) { |
| 1543 | struct prof_tdata_merge_iter_arg_s *arg = |
| 1544 | (struct prof_tdata_merge_iter_arg_s *)opaque; |
| 1545 | |
| 1546 | malloc_mutex_lock(arg->tsdn, tdata->lock); |
| 1547 | if (!tdata->expired) { |
| 1548 | size_t tabind; |
| 1549 | union { |
| 1550 | prof_tctx_t *p; |
| 1551 | void *v; |
| 1552 | } tctx; |
| 1553 | |
| 1554 | tdata->dumping = true; |
| 1555 | memset(&tdata->cnt_summed, 0, sizeof(prof_cnt_t)); |
| 1556 | for (tabind = 0; !ckh_iter(&tdata->bt2tctx, &tabind, NULL, |
| 1557 | &tctx.v);) { |
| 1558 | prof_tctx_merge_tdata(arg->tsdn, tctx.p, tdata); |
| 1559 | } |
| 1560 | |
| 1561 | arg->cnt_all.curobjs += tdata->cnt_summed.curobjs; |
| 1562 | arg->cnt_all.curbytes += tdata->cnt_summed.curbytes; |
| 1563 | if (opt_prof_accum) { |
| 1564 | arg->cnt_all.accumobjs += tdata->cnt_summed.accumobjs; |
| 1565 | arg->cnt_all.accumbytes += tdata->cnt_summed.accumbytes; |
| 1566 | } |
| 1567 | } else { |
| 1568 | tdata->dumping = false; |
| 1569 | } |
| 1570 | malloc_mutex_unlock(arg->tsdn, tdata->lock); |
| 1571 | |
| 1572 | return NULL; |
| 1573 | } |
| 1574 | |
| 1575 | static prof_tdata_t * |
| 1576 | prof_tdata_dump_iter(prof_tdata_tree_t *tdatas, prof_tdata_t *tdata, |
nothing calls this directly
no test coverage detected