diff --git a/src/filters/pcre.c b/src/filters/pcre.c index 4239e5e..eda91a5 100644 --- a/src/filters/pcre.c +++ b/src/filters/pcre.c @@ -182,9 +182,11 @@ match(cfg_t *cfg, const char *line, char *buf, size_t buf_size) { } void -destroy(cfg_t *cfg) { +flush(cfg_t *cfg) { f2b_regex_t *next = NULL, *r = NULL; + assert(cfg != NULL); + for (r = cfg->regexps; r != NULL; r = next) { next = r->next; if (cfg->study) @@ -192,5 +194,12 @@ destroy(cfg_t *cfg) { pcre_free(r->regex); free(r); } +} + +void +destroy(cfg_t *cfg) { + assert(cfg != NULL); + + flush(cfg); free(cfg); } diff --git a/src/filters/preg.c b/src/filters/preg.c index d3f3d0a..98afbb3 100644 --- a/src/filters/preg.c +++ b/src/filters/preg.c @@ -149,13 +149,22 @@ match(cfg_t *cfg, const char *line, char *buf, size_t buf_size) { } void -destroy(cfg_t *cfg) { +flush(cfg_t *cfg) { f2b_regex_t *next = NULL, *r = NULL; + assert(cfg != NULL); + for (r = cfg->regexps; r != NULL; r = next) { next = r->next; regfree(&r->regex); free(r); } +} + +void +destroy(cfg_t *cfg) { + assert(cfg != NULL); + + flush(cfg); free(cfg); }