Skip to content

Commit b8cf436

Browse files
Transurgeonclaude
andcommitted
Fix memory leak in new_param_scalar_mult
The retained param_node was never released because free_type_data was NULL. Add free_param_type_data to match const_vector_mult and left_matmul. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 01c6f82 commit b8cf436

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

src/bivariate/const_scalar_mult.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,24 @@ expr *new_const_scalar_mult(double a, expr *child)
117117
return node;
118118
}
119119

120+
static void free_param_type_data(expr *node)
121+
{
122+
const_scalar_mult_expr *sn = (const_scalar_mult_expr *) node;
123+
if (sn->param_source)
124+
{
125+
free_expr(sn->param_source);
126+
}
127+
}
128+
120129
expr *new_param_scalar_mult(expr *param_node, expr *child)
121130
{
122131
const_scalar_mult_expr *mult_node =
123132
(const_scalar_mult_expr *) calloc(1, sizeof(const_scalar_mult_expr));
124133
expr *node = &mult_node->base;
125134

126135
init_expr(node, child->d1, child->d2, child->n_vars, forward, jacobian_init,
127-
eval_jacobian, is_affine, wsum_hess_init, eval_wsum_hess, NULL);
136+
eval_jacobian, is_affine, wsum_hess_init, eval_wsum_hess,
137+
free_param_type_data);
128138
node->left = child;
129139
mult_node->a = param_node->value[0]; /* initial value */
130140
mult_node->param_source = param_node;

0 commit comments

Comments
 (0)