static void /* assumes exclusive access to bucket */ dynstats_destroyCountersIn(dynstats_bucket_t *b, htable *table, dynstats_ctr_t *ctrs) { dynstats_ctr_t *ctr; int ctrs_purged = 0; hashtable_destroy(table, 0); while (ctrs != NULL) { ctr = ctrs; ctrs = ctrs->next; dynstats_destroyCtr(ctr); ctrs_purged++; } STATSCOUNTER_ADD(b->ctrMetricsPurged, b->mutCtrMetricsPurged, ctrs_purged); ATOMIC_SUB(&b->metricCount, ctrs_purged, &b->mutMetricCount); }
static inline void /* assumes exclusive access to bucket */ dynstats_destroyCounters(dynstats_bucket_t *b) { dynstats_ctr_t *ctr; hashtable_destroy(b->table, 0); statsobj.DestructAllCounters(b->stats); while(1) { ctr = b->ctrs; if (ctr == NULL) { break; } else { b->ctrs = ctr->next; dynstats_destroyCtr(b, ctr, 0); } } STATSCOUNTER_BUMP(b->ctrMetricsPurged, b->mutCtrMetricsPurged, b->metricCount); }