diff --git a/drivers/net/cnxk/cnxk_rep.h b/drivers/net/cnxk/cnxk_rep.h index 9ede1e6dadd..5204c94633e 100644 --- a/drivers/net/cnxk/cnxk_rep.h +++ b/drivers/net/cnxk/cnxk_rep.h @@ -106,8 +106,12 @@ cnxk_ethdev_is_representor(const char *if_name) regex_t regex; int val; - val = regcomp(®ex, "net_.*_representor_.*", 0); + if (regcomp(®ex, "net_.*_representor_.*", 0) != 0) + return 0; + val = regexec(®ex, if_name, 0, NULL, 0); + regfree(®ex); + return (val == 0); } diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c index 8b1ba5b99ba..d7a0e48423a 100644 --- a/lib/eal/freebsd/eal.c +++ b/lib/eal/freebsd/eal.c @@ -795,6 +795,7 @@ rte_eal_cleanup(void) rte_eal_memory_detach(); eal_cleanup_config(internal_conf); eal_lcore_var_cleanup(); + rte_eal_log_cleanup(); return 0; } diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c index 6dacae72353..7b091ea9ae3 100644 --- a/lib/eal/windows/eal.c +++ b/lib/eal/windows/eal.c @@ -149,6 +149,7 @@ rte_eal_cleanup(void) rte_eal_memory_detach(); eal_cleanup_config(internal_conf); eal_lcore_var_cleanup(); + rte_eal_log_cleanup(); return 0; } diff --git a/lib/log/log.c b/lib/log/log.c index 8ad5250a137..32ba8531873 100644 --- a/lib/log/log.c +++ b/lib/log/log.c @@ -234,6 +234,21 @@ log_save_level(uint32_t priority, const char *regex, const char *pattern) return -1; } +static void +log_free_saved_levels(void) +{ + struct rte_eal_opt_loglevel *opt_ll; + + while ((opt_ll = TAILQ_FIRST(&opt_loglevel_list)) != NULL) { + TAILQ_REMOVE(&opt_loglevel_list, opt_ll, next); + if (opt_ll->pattern != NULL) + free(opt_ll->pattern); + else + regfree(&opt_ll->re_match); + free(opt_ll); + } +} + RTE_EXPORT_INTERNAL_SYMBOL(eal_log_save_regexp) int eal_log_save_regexp(const char *regex, uint32_t level) @@ -578,6 +593,8 @@ RTE_EXPORT_INTERNAL_SYMBOL(rte_eal_log_cleanup) void rte_eal_log_cleanup(void) { + log_free_saved_levels(); + if (rte_logs.is_internal_file && rte_logs.file != NULL) fclose(rte_logs.file); rte_logs.file = NULL;