Fix some leaks after allocation failures occur

This commit is contained in:
Max Brunsfeld 2016-05-16 10:49:22 -07:00
parent 88053cf723
commit 77e0e4bb16
2 changed files with 4 additions and 5 deletions

View file

@ -603,6 +603,7 @@ static RepairResult ts_parser__repair_error(TSParser *self, StackSlice slice,
return RepairSucceeded;
error:
ts_tree_array_delete(&slice.trees);
return RepairFailed;
}

View file

@ -75,10 +75,8 @@ static void stack_node_release(StackNode *self, StackNodeArray *pool) {
stack_node_release(self->links[i].node, pool);
}
if (pool->size >= MAX_NODE_POOL_SIZE)
if (pool->size >= MAX_NODE_POOL_SIZE || !array_push(pool, self))
ts_free(self);
else
array_push(pool, self);
}
}
@ -230,7 +228,7 @@ INLINE StackPopResult stack__iter(Stack *self, StackVersion version,
error:
for (size_t i = 0; i < self->pop_paths.size; i++)
array_delete(&self->pop_paths.contents[i].trees);
ts_tree_array_delete(&self->pop_paths.contents[i].trees);
array_clear(&self->slices);
return (StackPopResult){.status = StackPopFailed };
}
@ -283,7 +281,7 @@ error:
}
void ts_stack_delete(Stack *self) {
if (self->pop_paths.contents)
if (self->slices.contents)
array_delete(&self->slices);
if (self->pop_paths.contents)
array_delete(&self->pop_paths);