filters[i].init(filters + i);
}
-/**
- * Close and destroy a filter callback.
- *
- * \param fcb The filter callback to close.
- *
- * This removes \a fcb from the list of filter callbacks and calls
- * the close callback associated with \a fcb.
- */
-static void close_filter_callback(struct filter_callback *fcb)
-{
- PARA_NOTICE_LOG("closing filter_callback %p\n", fcb);
- list_del(&fcb->node);
- fcb->close(fcb);
-}
-
-/**
- * Close all callbacks of a filter node.
- *
- * \param fn The filter node which contains the filter callbacks to be closed.
- *
- * Call close_filter_callback() for each entry in the filter callback list
- * of \a fn.
- */
-static void close_callbacks(struct filter_node *fn)
-{
- struct filter_callback *fcb, *tmp;
-
- list_for_each_entry_safe(fcb, tmp, &fn->callbacks, node) {
- PARA_INFO_LOG("closing %s filter callback\n",
- filters[fn->filter_num].name);
- close_filter_callback(fcb);
- }
-}
-
-/**
- * Close all filter nodes and their callbacks.
- *
- * \param fc The filter chain to close.
- *
- * For each filter node determined by \a fc, call the close function of each
- * registered filter callback as well as the close function of the
- * corresponding filter. Free all resources and destroy all callback lists and
- * the filter node list.
- *
- * \sa filter::close, filter_callback::close
- */
-void close_filters(struct filter_chain *fc)
-{
- struct filter_node *fn;
- int i;
-
- if (!fc)
- return;
- PARA_NOTICE_LOG("closing filter chain %p\n", fc);
- FOR_EACH_FILTER_NODE(fn, fc, i) {
- struct filter *f = filters + fn->filter_num;
- close_callbacks(fn);
- PARA_INFO_LOG("closing %s filter\n", f->name);
- f->close(fn);
- free(fn->conf);
- }
- free(fc->filter_nodes);
-}
-
/*
* If the filter has a command line parser and options is not NULL, run it.
* Returns filter_num on success, negative on errors
printf_or_die("Options for %s:\n", f->name);
ggo_print_help(&f->help, detailed);
}
-
}
void generic_filter_pre_select(struct sched *s, struct task *t)