Пример #1
0
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);
}
Пример #2
0
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);
}