[gnome-control-center] printers: Plug memory leaks



commit 55d47bc83e5f346f71e246bfa51361e9bbf7f9ae
Author: Robert Ancell <robert ancell canonical com>
Date:   Fri Jun 15 14:38:03 2018 +1200

    printers: Plug memory leaks

 panels/printers/cc-printers-panel.c     |  3 +++
 panels/printers/pp-cups.c               |  4 ++++
 panels/printers/pp-details-dialog.c     |  1 +
 panels/printers/pp-new-printer-dialog.c |  2 ++
 panels/printers/pp-options-dialog.c     |  6 +++---
 panels/printers/pp-printer-entry.c      | 22 +++++++++++++++++++---
 6 files changed, 32 insertions(+), 6 deletions(-)
---
diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c
index 877028863..f05a3ec6d 100644
--- a/panels/printers/cc-printers-panel.c
+++ b/panels/printers/cc-printers-panel.c
@@ -934,6 +934,7 @@ actualize_printers_list_cb (GObject      *source_object,
         }
 
       g_error_free (error);
+      g_object_unref (cups);
       return;
     }
 
@@ -984,6 +985,8 @@ actualize_printers_list_cb (GObject      *source_object,
     }
 
   update_sensitivity (user_data);
+
+  g_object_unref (cups);
 }
 
 static void
diff --git a/panels/printers/pp-cups.c b/panels/printers/pp-cups.c
index 628d8ae8a..2a716d9e4 100644
--- a/panels/printers/pp-cups.c
+++ b/panels/printers/pp-cups.c
@@ -77,6 +77,10 @@ _pp_cups_get_dests_thread (GTask        *task,
     {
       g_task_return_pointer (task, dests, (GDestroyNotify) pp_cups_dests_free);
     }
+  else
+    {
+      pp_cups_dests_free (dests);
+    }
 }
 
 void
diff --git a/panels/printers/pp-details-dialog.c b/panels/printers/pp-details-dialog.c
index 7d174307b..bd15110c1 100644
--- a/panels/printers/pp-details-dialog.c
+++ b/panels/printers/pp-details-dialog.c
@@ -433,6 +433,7 @@ pp_details_dialog_new (GtkWindow            *parent,
   /* Translators: This is the title of the dialog. %s is the printer name. */
   title = g_strdup_printf (_("%s Details"), printer_name);
   gtk_label_set_label (self->dialog_title, title);
+  g_free (title);
 
   printer_url = g_strdup_printf ("<a href=\"http://%s:%d\";>%s</a>", printer_address, ippPort (), 
printer_address);
   gtk_label_set_markup (GTK_LABEL (self->printer_address_label), printer_url);
diff --git a/panels/printers/pp-new-printer-dialog.c b/panels/printers/pp-new-printer-dialog.c
index 0a9431055..f7cdfd8f8 100644
--- a/panels/printers/pp-new-printer-dialog.c
+++ b/panels/printers/pp-new-printer-dialog.c
@@ -619,6 +619,8 @@ pp_new_printer_dialog_finalize (GObject *object)
 
   g_clear_pointer (&priv->dialog, gtk_widget_destroy);
 
+  g_clear_pointer (&priv->list, ppd_list_free);
+
   if (priv->builder)
     g_clear_object (&priv->builder);
 
diff --git a/panels/printers/pp-options-dialog.c b/panels/printers/pp-options-dialog.c
index e848562c5..366808f80 100644
--- a/panels/printers/pp-options-dialog.c
+++ b/panels/printers/pp-options-dialog.c
@@ -269,7 +269,7 @@ string_in_table (gchar       *str,
 
 #define STRING_IN_TABLE(_str, _table) (string_in_table (_str, _table, G_N_ELEMENTS (_table)))
 
-static gchar *
+static const gchar *
 ppd_option_name_translate (ppd_option_t *option)
 {
   gint i;
@@ -277,10 +277,10 @@ ppd_option_name_translate (ppd_option_t *option)
   for (i = 0; i < G_N_ELEMENTS (ppd_option_translations); i++)
     {
       if (g_strcmp0 (ppd_option_translations[i].keyword, option->keyword) == 0)
-       return g_strdup (_(ppd_option_translations[i].translation));
+       return _(ppd_option_translations[i].translation);
     }
 
-  return g_strdup (option->text);
+  return option->text;
 }
 
 static gint
diff --git a/panels/printers/pp-printer-entry.c b/panels/printers/pp-printer-entry.c
index 3e5c8ff39..74735461e 100644
--- a/panels/printers/pp-printer-entry.c
+++ b/panels/printers/pp-printer-entry.c
@@ -113,6 +113,22 @@ enum {
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
+static InkLevelData *
+ink_level_data_new (void)
+{
+  return g_slice_new0 (InkLevelData);
+}
+
+static void
+ink_level_data_free (InkLevelData *data)
+{
+  g_clear_pointer (&data->marker_names, g_free);
+  g_clear_pointer (&data->marker_levels, g_free);
+  g_clear_pointer (&data->marker_colors, g_free);
+  g_clear_pointer (&data->marker_types, g_free);
+  g_slice_free (InkLevelData, data);
+}
+
 static void
 pp_printer_entry_get_property (GObject    *object,
                                guint       prop_id,
@@ -160,6 +176,7 @@ static void
 pp_printer_entry_init (PpPrinterEntry *self)
 {
   gtk_widget_init_template (GTK_WIDGET (self));
+  self->inklevel = ink_level_data_new ();
 }
 
 typedef struct {
@@ -226,7 +243,7 @@ sanitize_printer_model (gchar *printer_make_and_model)
 
   g_free (tmp);
 
-  return g_strdup (printer_model);
+  return printer_model;
 }
 
 static gboolean
@@ -797,8 +814,6 @@ pp_printer_entry_new (cups_dest_t  printer,
 
   self = g_object_new (PP_PRINTER_ENTRY_TYPE, "printer-name", printer.name, NULL);
 
-  self->inklevel = g_slice_new0 (InkLevelData);
-
   if (printer.instance)
     {
       instance = g_strdup_printf ("%s / %s", printer.name, printer.instance);
@@ -1005,6 +1020,7 @@ pp_printer_entry_dispose (GObject *object)
   g_clear_pointer (&self->printer_location, g_free);
   g_clear_pointer (&self->printer_make_and_model, g_free);
   g_clear_pointer (&self->printer_hostname, g_free);
+  g_clear_pointer (&self->inklevel, ink_level_data_free);
 
   g_cancellable_cancel (self->get_jobs_cancellable);
   g_clear_object (&self->get_jobs_cancellable);


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