Skip to content

Commit

Permalink
Fix all memory leaks
Browse files Browse the repository at this point in the history
  • Loading branch information
OussamaSaoudi-db committed Oct 9, 2024
1 parent 07c458b commit 23d1ed2
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
11 changes: 10 additions & 1 deletion ffi/examples/read-table/expression.h
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,7 @@ void free_expression(struct ExpressionRef ref)
for (size_t i = 0; i < var->len; i++) {
free_expression(var->expr_list[i]);
}
free(var->expr_list);
free(var);
break;
};
Expand All @@ -444,8 +445,11 @@ void free_expression(struct ExpressionRef ref)
case Struct: {
struct Struct* struct_data = &lit->value.struct_data;
for (size_t i = 0; i < struct_data->len; i++) {
free_expression(struct_data->expressions[i]);
free((void*)struct_data->field_names[i].ptr);
}
free(struct_data->expressions);
free(struct_data->field_names);
break;
}
case Array: {
Expand All @@ -461,6 +465,11 @@ void free_expression(struct ExpressionRef ref)
free((void*)string->ptr);
break;
}
case Binary: {
struct BinaryData* binary = &lit->value.binary;
free(binary->buf);
break;
}
case Integer:
case Long:
case Short:
Expand All @@ -471,7 +480,6 @@ void free_expression(struct ExpressionRef ref)
case Timestamp:
case TimestampNtz:
case Date:
case Binary:
case Decimal:
case Null:
break;
Expand Down Expand Up @@ -683,4 +691,5 @@ void test_kernel_expr()
struct ExpressionRef ref = construct_predicate(pred);
print_tree(ref, 0);
free_expression(ref);
free_kernel_predicate(pred);
}
6 changes: 6 additions & 0 deletions ffi/src/expressions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,12 @@ pub extern "C" fn visit_expression_literal_bool(
wrap_expression(state, Expression::literal(value))
}

/// Free the memory from the passed KernelPredicate
#[no_mangle]
pub unsafe extern "C" fn free_kernel_predicate(data: Handle<KernelPredicate>) {
data.drop_handle();
}

#[no_mangle]
pub unsafe extern "C" fn get_kernel_expression() -> Handle<KernelPredicate> {
use Expression as Expr;
Expand Down

0 comments on commit 23d1ed2

Please sign in to comment.