diff --git a/nodes/assign.c b/nodes/assign.c index fb56b8e..164dd18 100644 --- a/nodes/assign.c +++ b/nodes/assign.c @@ -35,6 +35,11 @@ handle_event(EventPositionBase * self, EventNode * event) } for (size_t i = 0; i < count; ++i) { event->position = &node->as_GraphNode.outputs.elements[i]->as_EventPositionBase; + if (!event->position) { + EventNode *orphaned = event; + event = orphaned->prev; + event_destroy(orphaned); + } event = event->next; } return true; diff --git a/nodes/differentiate.c b/nodes/differentiate.c index 61a47ea..5f68baf 100644 --- a/nodes/differentiate.c +++ b/nodes/differentiate.c @@ -25,6 +25,11 @@ handle_event(EventPositionBase * self, EventNode * event) } for (size_t i = 0; i < count; ++i) { event->position = &node->as_GraphNode.outputs.elements[i]->as_EventPositionBase; + if (!event->position) { + EventNode *orphaned = event; + event = orphaned->prev; + event_destroy(orphaned); + } event = event->next; } return true; diff --git a/nodes/modifiers.c b/nodes/modifiers.c index d034a00..844a90c 100644 --- a/nodes/modifiers.c +++ b/nodes/modifiers.c @@ -22,6 +22,11 @@ handle_event(EventPositionBase * self, EventNode * event) } for (size_t i = 0; i < count; ++i) { event->position = &node->as_GraphNode.outputs.elements[i]->as_EventPositionBase; + if (!event->position) { + EventNode *orphaned = event; + event = orphaned->prev; + event_destroy(orphaned); + } event = event->next; } return true; diff --git a/nodes/router.c b/nodes/router.c index 4214a8c..5c44377 100644 --- a/nodes/router.c +++ b/nodes/router.c @@ -17,7 +17,11 @@ handle_event(EventPositionBase * self, EventNode * event) } if (event_predicate_apply(node->predicates[i], event) == EVPREDRES_ACCEPTED) { if (event_replicate(event, 1)) { - event->next->position = &node->as_GraphNode.outputs.elements[i]->as_EventPositionBase; + EventNode * replica = event->next; + replica->position = &node->as_GraphNode.outputs.elements[i]->as_EventPositionBase; + if (!replica->position) { + event_destroy(replica); + } } } } diff --git a/nodes/scale.c b/nodes/scale.c index 46352ee..3ab8da0 100644 --- a/nodes/scale.c +++ b/nodes/scale.c @@ -39,6 +39,11 @@ handle_event(EventPositionBase * self, EventNode * event) } for (size_t i = 0; i < count; ++i) { event->position = &node->as_GraphNode.outputs.elements[i]->as_EventPositionBase; + if (!event->position) { + EventNode *orphaned = event; + event = orphaned->prev; + event_destroy(orphaned); + } event = event->next; } return true; diff --git a/nodes/tee.c b/nodes/tee.c index a098e33..acbe779 100644 --- a/nodes/tee.c +++ b/nodes/tee.c @@ -15,6 +15,11 @@ handle_event(EventPositionBase * self, EventNode * event) } for (size_t i = 0; i < count; ++i) { event->position = &node->outputs.elements[i]->as_EventPositionBase; + if (!event->position) { + EventNode *orphaned = event; + event = orphaned->prev; + event_destroy(orphaned); + } event = event->next; } return true;