Fix event_predicate
- Leaking handle lists when deleting aggregate predicates - Wrong dynamic array growth condition - Handle invalid predicate type field
This commit is contained in:
parent
1704817009
commit
39ea42018f
|
@ -38,6 +38,14 @@ static void
|
||||||
event_predicate_list_clear(EventPredicateList * lst)
|
event_predicate_list_clear(EventPredicateList * lst)
|
||||||
{
|
{
|
||||||
if (lst->values) {
|
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);
|
free(lst->values);
|
||||||
lst->values = NULL;
|
lst->values = NULL;
|
||||||
}
|
}
|
||||||
|
@ -46,16 +54,16 @@ event_predicate_list_clear(EventPredicateList * lst)
|
||||||
}
|
}
|
||||||
|
|
||||||
EventPredicateHandle
|
EventPredicateHandle
|
||||||
event_predicate_register(EventPredicate filter)
|
event_predicate_register(EventPredicate predicate)
|
||||||
{
|
{
|
||||||
size_t i = predicates.length;
|
size_t i = predicates.length;
|
||||||
if (i >= INT32_MAX) {
|
if (i >= INT32_MAX) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
while (i <= predicates.capacity) {
|
while (i >= predicates.capacity) {
|
||||||
event_predicate_list_extend(&predicates);
|
event_predicate_list_extend(&predicates);
|
||||||
}
|
}
|
||||||
predicates.values[i] = filter;
|
predicates.values[i] = predicate;
|
||||||
predicates.length = i + 1;
|
predicates.length = i + 1;
|
||||||
return (EventPredicateHandle) i;
|
return (EventPredicateHandle) i;
|
||||||
}
|
}
|
||||||
|
@ -157,6 +165,8 @@ event_predicate_apply(EventPredicateHandle handle, EventNode * event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
return EVPREDRES_DISABLED;
|
||||||
}
|
}
|
||||||
if (ptr->inverted) {
|
if (ptr->inverted) {
|
||||||
accepted = !accepted;
|
accepted = !accepted;
|
||||||
|
|
|
@ -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);
|
EventPredicate event_predicate_get(EventPredicateHandle handle);
|
||||||
EventPredicateResult event_predicate_apply(EventPredicateHandle handle, EventNode * event);
|
EventPredicateResult event_predicate_apply(EventPredicateHandle handle, EventNode * event);
|
||||||
void event_predicate_set_enabled(EventPredicateHandle handle, bool enabled);
|
void event_predicate_set_enabled(EventPredicateHandle handle, bool enabled);
|
||||||
|
|
Loading…
Reference in New Issue