static inline void tc_class_free(struct tc_device *n, struct tc_class *c) { if(c == n->classes) { if(likely(c->next)) n->classes = c->next; else n->classes = c->prev; } if(c == n->last_class) { if(unlikely(c->next)) n->last_class = c->next; else n->last_class = c->prev; } if(c->next) c->next->prev = c->prev; if(c->prev) c->prev->next = c->next; debug(D_TC_LOOP, "Removing from device '%s' class '%s', parentid '%s', leafid '%s', unused=%d", n->id, c->id, c->parentid?c->parentid:"", c->leafid?c->leafid:"", c->unupdated); if(unlikely(tc_class_index_del(n, c) != c)) error("plugin_tc: INTERNAL ERROR: attempt remove class '%s' from device '%s': removed a different calls", c->id, n->id); freez(c->id); freez(c->name); freez(c->leafid); freez(c->parentid); freez(c); }
static inline void tc_class_free(struct tc_device *n, struct tc_class *c) { debug(D_TC_LOOP, "Removing from device '%s' class '%s', parentid '%s', leafid '%s', seen=%d", n->id, c->id, c->parentid?c->parentid:"", c->leafid?c->leafid:"", c->seen); if(c->next) c->next->prev = c->prev; if(c->prev) c->prev->next = c->next; if(n->classes == c) { if(c->next) n->classes = c->next; else n->classes = c->prev; } tc_class_index_del(n, c); if(c->id) free(c->id); if(c->name) free(c->name); if(c->leafid) free(c->leafid); if(c->parentid) free(c->parentid); free(c); }