diff --git a/event_predicate.c b/event_predicate.c index 8ebfde6..26d45a1 100644 --- a/event_predicate.c +++ b/event_predicate.c @@ -38,6 +38,14 @@ static void event_predicate_list_clear(EventPredicateList * lst) { if (lst->values) { + for (size_t i = 0; i < lst->length; ++i) { + EventPredicateType type = lst->values[i].type; + if (type == EVPRED_CONJUNCTION || type == EVPRED_DISJUNCTION) { + if (lst->values[i].aggregate_data.handles) { + free(lst->values[i].aggregate_data.handles); + } + } + } free(lst->values); lst->values = NULL; } @@ -46,16 +54,16 @@ event_predicate_list_clear(EventPredicateList * lst) } EventPredicateHandle -event_predicate_register(EventPredicate filter) +event_predicate_register(EventPredicate predicate) { size_t i = predicates.length; if (i >= INT32_MAX) { return -1; } - while (i <= predicates.capacity) { + while (i >= predicates.capacity) { event_predicate_list_extend(&predicates); } - predicates.values[i] = filter; + predicates.values[i] = predicate; predicates.length = i + 1; return (EventPredicateHandle) i; } @@ -157,6 +165,8 @@ event_predicate_apply(EventPredicateHandle handle, EventNode * event) } } break; + default: + return EVPREDRES_DISABLED; } if (ptr->inverted) { accepted = !accepted; diff --git a/event_predicate.h b/event_predicate.h index 2b1a240..f2ad2c7 100644 --- a/event_predicate.h +++ b/event_predicate.h @@ -41,7 +41,7 @@ struct event_predicate { }; }; -EventPredicateHandle event_predicate_register(EventPredicate filter); +EventPredicateHandle event_predicate_register(EventPredicate predicate); EventPredicate event_predicate_get(EventPredicateHandle handle); EventPredicateResult event_predicate_apply(EventPredicateHandle handle, EventNode * event); void event_predicate_set_enabled(EventPredicateHandle handle, bool enabled);