filter: Fix a memory leak in non-btr mode.
[paraslash.git] / filter_common.c
index bc5539d0b842a7f81a735a53918c565d4c785d02..7fa30803d6c02a87699b3cc927e0c8b7966e36c9 100644 (file)
@@ -179,6 +179,7 @@ void close_filters(struct filter_chain *fc)
                close_callbacks(fn);
                PARA_INFO_LOG("closing %s filter\n", f->name);
                f->close(fn);
+               free(fn->conf);
        }
        free(fc->filter_nodes);
 }
@@ -276,22 +277,14 @@ void print_filter_helps(int detailed)
 
 }
 
-/** 640K ought to be enough for everybody ;) */
-#define FILTER_MAX_PENDING (640 * 1024)
-
-int prepare_filter_node(struct btr_node *btrn, size_t min_len)
+void generic_filter_pre_select(struct sched *s, struct task *t)
 {
-       size_t iqs;
+       struct filter_node *fn = container_of(t, struct filter_node, task);
 
-       if (btr_eof(btrn))
-               return -E_FC_EOF;
-       if (btr_bytes_pending(btrn) > FILTER_MAX_PENDING)
-               return 0;
-       iqs = btr_get_input_queue_size(btrn);
-       if (iqs < min_len && !btr_no_parent(btrn))
-               return 0;
-       assert(iqs != 0);
-       /* avoid "buffer too small" errors from the decoder */
-       btr_merge_to(btrn, min_len);
-       return 1;
+       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;
+       }
 }
+