diff --git a/src/fsm/main.c b/src/fsm/main.c index 1d60ce5c7..194a18bcd 100644 --- a/src/fsm/main.c +++ b/src/fsm/main.c @@ -666,7 +666,7 @@ main(int argc, char *argv[]) printf("\n"); } - closure_free(closures, fsm->statecount); + closure_free(fsm, closures, fsm->statecount); return 0; } else { diff --git a/src/libfsm/closure.c b/src/libfsm/closure.c index b5b4f969f..3993afcda 100644 --- a/src/libfsm/closure.c +++ b/src/libfsm/closure.c @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -189,7 +190,7 @@ epsilon_closure(struct fsm *fsm) } void -closure_free(struct state_set **closures, size_t n) +closure_free(struct fsm *fsm, struct state_set **closures, size_t n) { fsm_state_t s; @@ -197,6 +198,6 @@ closure_free(struct state_set **closures, size_t n) state_set_free(closures[s]); } - free(closures); + f_free(fsm->alloc, closures); } diff --git a/src/libfsm/epsilons.c b/src/libfsm/epsilons.c index 51dd3e138..bda3b86b3 100644 --- a/src/libfsm/epsilons.c +++ b/src/libfsm/epsilons.c @@ -168,7 +168,7 @@ fsm_remove_epsilons(struct fsm *nfa) res = 1; cleanup: if (eclosures != NULL) { - closure_free(eclosures, state_count); + closure_free(nfa, eclosures, state_count); } return res; diff --git a/src/libfsm/internal.h b/src/libfsm/internal.h index f45e070ff..1b08767a7 100644 --- a/src/libfsm/internal.h +++ b/src/libfsm/internal.h @@ -92,7 +92,7 @@ struct state_set ** epsilon_closure(struct fsm *fsm); void -closure_free(struct state_set **closures, size_t n); +closure_free(struct fsm *fsm, struct state_set **closures, size_t n); /* * Internal free function that invokes free(3) by default, or a user-provided