[gnumeric] Conditional format: plug leak in gui.



commit 815ace9186009419953f9400413f94a0c2a6804b
Author: Morten Welinder <terra gnome org>
Date:   Sat Mar 15 16:07:54 2014 -0400

    Conditional format: plug leak in gui.

 NEWS                                  |    1 +
 src/dialogs/ChangeLog                 |    1 +
 src/dialogs/dialog-cell-format-cond.c |   11 +++++++++--
 src/style-border.c                    |    7 ++++---
 4 files changed, 15 insertions(+), 5 deletions(-)
---
diff --git a/NEWS b/NEWS
index aba7484..ed6bc05 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,7 @@ Morten:
        * Improve xls import/export of conditional formats.  [#726202]
        * Fix case sensitivity for conditional formats. [#726246]
        * Fix minor conditional format GUI issues.
+       * Plug leak.
 
 --------------------------------------------------------------------------
 Gnumeric 1.12.12
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index 5f980c0..b1adf40 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -3,6 +3,7 @@
        * dialog-cell-format-cond.c
        (cb_c_fmt_dialog_chooser_entry_changed): We need to return FALSE
        in a focus-out handler.
+       (c_fmt_dialog_selection_type): Plug leaks.
 
 2014-03-03  Morten Welinder <terra gnome org>
 
diff --git a/src/dialogs/dialog-cell-format-cond.c b/src/dialogs/dialog-cell-format-cond.c
index 351c5cd..2461a90 100644
--- a/src/dialogs/dialog-cell-format-cond.c
+++ b/src/dialogs/dialog-cell-format-cond.c
@@ -1056,17 +1056,20 @@ c_fmt_dialog_condition_collector (G_GNUC_UNUSED SheetView *sv, GnmRange const *r
 
 static gboolean
 c_fmt_dialog_selection_type (SheetView *sv,
-                          GnmRange const *range,
-                          gpointer user_data)
+                            GnmRange const *range,
+                            gpointer user_data)
 {
        GnmBorder *borders[GNM_STYLE_BORDER_EDGE_MAX] = {NULL};
        CFormatState *state = user_data;
+       int i;
        GSList *merged = gnm_sheet_merge_get_overlap (sv->sheet, range);
        GnmRange r = *range;
        gboolean allow_multi =
                merged == NULL ||
                merged->next != NULL ||
                !range_equal ((GnmRange *)merged->data, range);
+
+
        g_slist_free (merged);
 
        /* allow_multi == FALSE && !is_singleton (range) means that we are in
@@ -1081,6 +1084,10 @@ c_fmt_dialog_selection_type (SheetView *sv,
        state->conflicts = sheet_style_find_conflicts (state->sheet, &r,
                &(state->style), borders);
 
+       for (i = GNM_STYLE_BORDER_TOP ; i < GNM_STYLE_BORDER_EDGE_MAX ; i++) {
+               gnm_style_border_unref (borders[i]);
+       }
+
        return TRUE;
 }
 
diff --git a/src/style-border.c b/src/style-border.c
index a19ca9f..1d07dd4 100644
--- a/src/style-border.c
+++ b/src/style-border.c
@@ -286,7 +286,7 @@ gnm_style_border_ref (GnmBorder *border)
        /* NULL is ok */
        if (border != NULL) {
                ++border->ref_count;
-               if (0) g_printerr ("style border ref: %p\n", border);
+               if (0) g_printerr ("style border ref: %p  [color=%p]\n", border, border->color);
        }
        return border;
 }
@@ -327,10 +327,11 @@ cb_border_leak (gpointer key, gpointer value, gpointer user_data)
 {
        GnmBorder *border = value;
 
-       g_printerr ("Leaking style-border at %p [color=%p  line=%d].\n",
+       g_printerr ("Leaking style-border at %p [color=%p  line=%d] refs=%d.\n",
                    (void *)border,
                    border->color,
-                   border->line_type);
+                   border->line_type,
+                   border->ref_count);
 }
 
 void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]