- goto out;
- sit->output_error = &fc->task.error;
-
- stdout_set_defaults(sot);
- sot->bufp = fc->outbufp;
- sot->loaded = fc->out_loaded;
- sot->input_error = &fc->task.error;
-
- register_task(&sit->task);
- register_task(&fc->task);
- register_task(&sot->task);
- s.default_timeout.tv_sec = 1;
- s.default_timeout.tv_usec = 0;
+ goto free_lpr;
+ sit->btrn = btr_new_node(&(struct btr_node_description)
+ EMBRACE(.name = "stdin"));
+ stdin_task_register(sit, &s);
+
+ fns = arr_alloc(OPT_GIVEN(FILTER), sizeof(*fns));
+ for (i = 0, parent = sit->btrn; i < OPT_GIVEN(FILTER); i++) {
+ const char *fa = lls_string_val(i, OPT_RESULT(FILTER));
+ const char *name;
+ struct filter_node *fn;
+ struct task_info ti;
+
+ fn = fns[i] = zalloc(sizeof(*fn));
+ fn->filter_num = filter_setup(fa, &fn->conf, &filter_lpr);
+ name = filter_name(fn->filter_num);
+ fn->lpr = filter_lpr;
+ PARA_DEBUG_LOG("filter #%d: %s\n", i, name);
+ f = filter_get(fn->filter_num);
+ fn->btrn = btr_new_node(&(struct btr_node_description)
+ EMBRACE(.name = name, .parent = parent,
+ .handler = f->execute, .context = fn));
+ ti.name = name;
+ ti.pre_monitor = f->pre_monitor;
+ ti.post_monitor = f->post_monitor;
+ ti.context = fn;
+ if (f->open)
+ f->open(fn);
+ fn->task = task_register(&ti, &s);
+ parent = fn->btrn;
+ }
+ sot->btrn = btr_new_node(&(struct btr_node_description)
+ EMBRACE(.name = "stdout", .parent = parent));
+ stdout_task_register(sot, &s);
+
+ s.default_timeout = 1000;
+ btr_log_tree(sit->btrn, LL_INFO);