#include <regex.h>
#include <sys/types.h>
#include <dirent.h>
+#include <stdbool.h>
#include "para.h"
#include "list.h"
#include "sched.h"
#include "fd.h"
#include "ggo.h"
+#include "buffer_tree.h"
#include "filter.h"
#include "error.h"
#include "string.h"
*
* \sa filter_node, filter#convert, filter_callback.
*/
-void filter_pre_select(__a_unused struct sched *s, struct task *t)
+void filter_post_select(__a_unused struct sched *s, struct task *t)
{
struct filter_chain *fc = container_of(t, struct filter_chain, task);
struct filter_node *fn;
conv_total += conv;
if (conv)
goto again;
- if (conv_total) {
- /*
- * Other pre_select functions might have already been called by
- * now and decided to do nothing, e.g. because their output
- * buffer was full or the input buffer was empty. We just
- * converted something which caused these buffers to change but
- * we can't make the other tasks reconsider their decision at
- * this point. So force a minimal timeout for the next select
- * call to avoid unnecessary delays.
- */
- s->timeout.tv_sec = 0;
- s->timeout.tv_usec = 1;
- }
if (*fc->input_error >= 0)
return;
if (*fc->out_loaded)
}
}
+
+void generic_filter_pre_select(struct sched *s, struct task *t)
+{
+ struct filter_node *fn = container_of(t, struct filter_node, task);
+
+ t->error = 0;
+ if (btr_node_status(fn->btrn, fn->min_iqs, BTR_NT_INTERNAL) != 0) {
+ s->timeout.tv_sec = 0;
+ s->timeout.tv_usec = 1;
+ }
+}
+