static inline void rrdsetvar_free_variables(RRDSETVAR *rs) { RRDSET *st = rs->rrdset; RRDHOST *host = st->rrdhost; // ------------------------------------------------------------------------ // CHART rrdvar_free(host, &st->rrdvar_root_index, rs->var_local); rs->var_local = NULL; // ------------------------------------------------------------------------ // FAMILY rrdvar_free(host, &st->rrdfamily->rrdvar_root_index, rs->var_family); rs->var_family = NULL; rrdvar_free(host, &st->rrdfamily->rrdvar_root_index, rs->var_family_name); rs->var_family_name = NULL; // ------------------------------------------------------------------------ // HOST rrdvar_free(host, &host->rrdvar_root_index, rs->var_host); rs->var_host = NULL; rrdvar_free(host, &host->rrdvar_root_index, rs->var_host_name); rs->var_host_name = NULL; // ------------------------------------------------------------------------ // KEYS freez(rs->key_fullid); rs->key_fullid = NULL; freez(rs->key_fullname); rs->key_fullname = NULL; }
void rrdvar_free_remaining_variables(RRDHOST *host, avl_tree_lock *tree_lock) { // FIXME: this is not bullet proof - avl should support some means to destroy it // with a callback for each item already in the index RRDVAR *rv, *last = NULL; while((rv = (RRDVAR *)tree_lock->avl_tree.root)) { if(unlikely(rv == last)) { error("RRDVAR: INTERNAL ERROR: Cannot cleanup tree of RRDVARs"); break; } last = rv; rrdvar_free(host, tree_lock, rv); } }