From a6d3704e38b6c1cb09286e9778b6363825d65c4d Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 20 May 2021 18:00:55 +0200 Subject: [PATCH] BUG/MEDIUM: filters: Exec pre/post analysers only one time per filter For each filter, pre and post callback functions must only be called one time. To do so, when one of them is finished, the corresponding analyser bit must be removed from pre_analyzers or post_analyzers bit field. It is only an issue with pre-analyser callback functions if the corresponding analyser yields. It may happens with lua action for instance. In this case, the filters pre analyser callback function is unexpectedly called several times. This patch should fix the issue #1263. It must be backported is all stable versions. --- src/filters.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/filters.c b/src/filters.c index b684b44..99b44e0 100644 --- a/src/filters.c +++ b/src/filters.c @@ -757,6 +757,7 @@ flt_pre_analyze(struct stream *s, struct channel *chn, unsigned int an_bit) ret = FLT_OPS(filter)->channel_pre_analyze(s, filter, chn, an_bit); if (ret <= 0) BREAK_EXECUTION(s, chn, check_result); + filter->pre_analyzers &= ~an_bit; } } RESUME_FILTER_END; @@ -789,6 +790,7 @@ flt_post_analyze(struct stream *s, struct channel *chn, unsigned int an_bit) ret = FLT_OPS(filter)->channel_post_analyze(s, filter, chn, an_bit); if (ret < 0) break; + filter->post_analyzers &= ~an_bit; } } ret = handle_analyzer_result(s, chn, 0, ret); -- 1.7.10.4