Пример #1
0
static inline void tc_device_classes_cleanup(struct tc_device *d) {
    static int cleanup_every = 999;

    if(unlikely(cleanup_every > 0)) {
        cleanup_every = (int) config_get_number("plugin:tc", "cleanup unused classes every", 120);
        if(cleanup_every < 0) cleanup_every = -cleanup_every;
    }

    d->name_updated = 0;
    d->family_updated = 0;

    struct tc_class *c = d->classes;
    while(c) {
        if(unlikely(cleanup_every && c->unupdated >= cleanup_every)) {
            struct tc_class *nc = c->next;
            tc_class_free(d, c);
            c = nc;
        }
        else {
            c->updated = 0;
            c->name_updated = 0;

            c = c->next;
        }
    }
}
Пример #2
0
static inline void tc_device_free(struct tc_device *n)
{
    if(n->next) n->next->prev = n->prev;
    if(n->prev) n->prev->next = n->next;
    if(tc_device_root == n) {
        if(n->next) tc_device_root = n->next;
        else tc_device_root = n->prev;
    }

    if(unlikely(tc_device_index_del(n) != n))
        error("plugin_tc: INTERNAL ERROR: removing device '%s' removed a different device.", n->id);

    while(n->classes) tc_class_free(n, n->classes);

    freez(n->id);
    freez(n->name);
    freez(n->family);
    freez(n);
}
Пример #3
0
static inline void tc_device_free(struct tc_device *n)
{
	if(n->next) n->next->prev = n->prev;
	if(n->prev) n->prev->next = n->next;
	if(tc_device_root == n) {
		if(n->next) tc_device_root = n->next;
		else tc_device_root = n->prev;
	}

	tc_device_index_del(n);

	while(n->classes) tc_class_free(n, n->classes);

	if(n->id) free(n->id);
	if(n->name) free(n->name);
	if(n->family) free(n->family);

	free(n);
}
Пример #4
0
static inline void tc_device_classes_cleanup(struct tc_device *d) {
	static int cleanup_every = 999;

	if(cleanup_every > 0) {
		cleanup_every = (int) -config_get_number("plugin:tc", "cleanup unused classes every", 60);
		if(cleanup_every > 0) cleanup_every = -cleanup_every;
		if(cleanup_every == 0) cleanup_every = -1;
	}

	struct tc_class *c = d->classes;
	while(c) {
		if(c->seen < cleanup_every) {
			struct tc_class *nc = c->next;
			tc_class_free(d, c);
			c = nc;
		}
		else c = c->next;

		if(c) {
			c->updated = 0;
			c->seen--;
		}
	}
}