summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2018-06-15 14:38:03 +1200
committerRobert Ancell <robert.ancell@gmail.com>2018-06-25 22:53:10 +0000
commit55d47bc83e5f346f71e246bfa51361e9bbf7f9ae (patch)
treeff54a7ffdccb75335629d9b4fbc72fab510c31b2
parent361e7654278b9505b0bdb8e0b34557f4a4d8fe19 (diff)
downloadgnome-control-center-55d47bc83e5f346f71e246bfa51361e9bbf7f9ae.tar.gz
printers: Plug memory leaks
-rw-r--r--panels/printers/cc-printers-panel.c3
-rw-r--r--panels/printers/pp-cups.c4
-rw-r--r--panels/printers/pp-details-dialog.c1
-rw-r--r--panels/printers/pp-new-printer-dialog.c2
-rw-r--r--panels/printers/pp-options-dialog.c6
-rw-r--r--panels/printers/pp-printer-entry.c22
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);