From e6a40ca04228812bce58f2e79e5650321a0fe48b Mon Sep 17 00:00:00 2001 From: "Andreas J. Guelzow" Date: Thu, 11 Apr 2002 21:44:29 +0000 Subject: [PATCH] fix leak (invalidate_refs) : fix leak (cb_name_invalidate_sheet) : fix 2002-04-11 Andreas J. Guelzow * src/dependent.c (dependent_set_expr) : fix leak (invalidate_refs) : fix leak (cb_name_invalidate_sheet) : fix leak * src/expr-name.c (expr_name_create) : fix leak --- ChangeLog | 7 +++++++ OChangeLog-2003-12-23 | 7 +++++++ OChangeLog-2005-11-14 | 7 +++++++ src/dependent.c | 9 ++++++--- src/expr-name.c | 1 + 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 783142d73..8558df93b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2002-04-11 Andreas J. Guelzow + + * src/dependent.c (dependent_set_expr) : fix leak + (invalidate_refs) : fix leak + (cb_name_invalidate_sheet) : fix leak + * src/expr-name.c (expr_name_create) : fix leak + 2002-04-11 Andreas J. Guelzow * src/sheet-object-graphic.c (cb_dialog_graphic_config_apply_clicked) : diff --git a/OChangeLog-2003-12-23 b/OChangeLog-2003-12-23 index 783142d73..8558df93b 100644 --- a/OChangeLog-2003-12-23 +++ b/OChangeLog-2003-12-23 @@ -1,3 +1,10 @@ +2002-04-11 Andreas J. Guelzow + + * src/dependent.c (dependent_set_expr) : fix leak + (invalidate_refs) : fix leak + (cb_name_invalidate_sheet) : fix leak + * src/expr-name.c (expr_name_create) : fix leak + 2002-04-11 Andreas J. Guelzow * src/sheet-object-graphic.c (cb_dialog_graphic_config_apply_clicked) : diff --git a/OChangeLog-2005-11-14 b/OChangeLog-2005-11-14 index 783142d73..8558df93b 100644 --- a/OChangeLog-2005-11-14 +++ b/OChangeLog-2005-11-14 @@ -1,3 +1,10 @@ +2002-04-11 Andreas J. Guelzow + + * src/dependent.c (dependent_set_expr) : fix leak + (invalidate_refs) : fix leak + (cb_name_invalidate_sheet) : fix leak + * src/expr-name.c (expr_name_create) : fix leak + 2002-04-11 Andreas J. Guelzow * src/sheet-object-graphic.c (cb_dialog_graphic_config_apply_clicked) : diff --git a/src/dependent.c b/src/dependent.c index a8bf5cd09..bb2219b88 100644 --- a/src/dependent.c +++ b/src/dependent.c @@ -145,8 +145,6 @@ dependent_set_expr (Dependent *dep, GnmExpr const *new_expr) } #endif - if (new_expr != NULL) - gnm_expr_ref (new_expr); if (dependent_is_linked (dep)) dependent_unlink (dep, NULL); @@ -160,6 +158,8 @@ dependent_set_expr (Dependent *dep, GnmExpr const *new_expr) DependentClass *klass = g_ptr_array_index (dep_classes, t); g_return_if_fail (klass); + if (new_expr != NULL) + gnm_expr_ref (new_expr); if (klass->set_expr != NULL) (*klass->set_expr) (dep, new_expr); @@ -1540,8 +1540,10 @@ invalidate_refs (Dependent *dep, GnmExprRewriteInfo const *rwinfo) * 2j we had a duplicate reference and we have already removed it. * 3) We depended on things via a name which will be invalidated elsewhere */ - if (newtree != NULL) + if (newtree != NULL) { dependent_set_expr (dep, newtree); + gnm_expr_unref (newtree); + } } /* @@ -1610,6 +1612,7 @@ cb_name_invalidate_sheet (gpointer key, gpointer value, gpointer rwinfo) GnmExpr const *new_expr = gnm_expr_rewrite (nexpr->t.expr_tree, rwinfo); g_return_if_fail (new_expr != NULL); expr_name_set_expr (nexpr, new_expr); + gnm_expr_unref (new_expr); } /* diff --git a/src/expr-name.c b/src/expr-name.c index 9f53f051d..ea9892de5 100644 --- a/src/expr-name.c +++ b/src/expr-name.c @@ -308,6 +308,7 @@ expr_name_create (ParsePos const *pp, char const *name, * creation error back to the calling routine */ res = expr_name_add (pp, name, expr, &err); + gnm_expr_unref (expr); if (err != NULL) error->message = g_strdup (err); return res; -- GitLab