[gnome-control-center] printers: Don't pass ownership in get_ppd_names_async callback



commit d970ae48b47357ecca74dd28917e702a8234b461
Author: Robert Ancell <robert ancell canonical com>
Date:   Fri Feb 12 15:01:43 2021 +1300

    printers: Don't pass ownership in get_ppd_names_async callback

 panels/printers/pp-details-dialog.c | 20 --------------------
 panels/printers/pp-utils.c          | 33 +++++++++++++++------------------
 2 files changed, 15 insertions(+), 38 deletions(-)
---
diff --git a/panels/printers/pp-details-dialog.c b/panels/printers/pp-details-dialog.c
index 28b047234..4e5039f47 100644
--- a/panels/printers/pp-details-dialog.c
+++ b/panels/printers/pp-details-dialog.c
@@ -75,25 +75,6 @@ printer_name_changed (PpDetailsDialog *self)
   gtk_label_set_label (self->dialog_title, title);
 }
 
-static void
-ppd_names_free (gpointer user_data)
-{
-  PPDName **names = (PPDName **) user_data;
-  gint      i;
-
-  if (names)
-    {
-      for (i = 0; names[i]; i++)
-        {
-          g_free (names[i]->ppd_name);
-          g_free (names[i]->ppd_display_name);
-          g_free (names[i]);
-        }
-
-      g_free (names);
-    }
-}
-
 static void set_ppd_cb (const gchar *printer_name, gboolean success, gpointer user_data);
 
 static void
@@ -114,7 +95,6 @@ get_ppd_names_cb (PPDName     **names,
                                  self->cancellable,
                                  set_ppd_cb,
                                  self);
-          ppd_names_free (names);
         }
       else
         {
diff --git a/panels/printers/pp-utils.c b/panels/printers/pp-utils.c
index aed1bb89d..39e31d847 100644
--- a/panels/printers/pp-utils.c
+++ b/panels/printers/pp-utils.c
@@ -1627,8 +1627,8 @@ typedef void (*GPACallback) (gchar    **attribute_values,
 
 typedef struct
 {
-  gchar         *attribute_name;
   gchar        **ppds_names;
+  gchar         *attribute_name;
   gchar        **result;
   GPACallback    callback;
   gpointer       user_data;
@@ -1655,6 +1655,8 @@ gpa_data_free (GPAData *data)
 {
   g_free (data->attribute_name);
   g_strfreev (data->ppds_names);
+  if (data->result != NULL)
+    g_strfreev (data->result);
   if (data->context)
     g_main_context_unref (data->context);
   g_free (data);
@@ -1825,6 +1827,16 @@ static void
 gpn_data_free (GPNData *data)
 {
   g_free (data->printer_name);
+  if (data->result != NULL)
+    {
+      for (int i = 0; data->result[i]; i++)
+        {
+           g_free (data->result[i]->ppd_name);
+           g_free (data->result[i]->ppd_display_name);
+           g_free (data->result[i]);
+        }
+      g_free (data->result);
+    }
   g_clear_object (&data->cancellable);
   g_free (data);
 }
@@ -1840,17 +1852,6 @@ get_ppd_names_async_cb (gchar    **attribute_values,
 
   if (g_cancellable_is_cancelled (data->cancellable))
     {
-      g_strfreev (attribute_values);
-
-      for (i = 0; data->result[i]; i++)
-        {
-          g_free (data->result[i]->ppd_name);
-          g_free (data->result[i]);
-        }
-
-      g_free (data->result);
-      data->result = NULL;
-
       data->callback (NULL,
                       data->printer_name,
                       TRUE,
@@ -1861,9 +1862,7 @@ get_ppd_names_async_cb (gchar    **attribute_values,
   if (attribute_values)
     {
       for (i = 0; attribute_values[i]; i++)
-        data->result[i]->ppd_display_name = attribute_values[i];
-
-      g_free (attribute_values);
+        data->result[i]->ppd_display_name = g_strdup (attribute_values[i]);
     }
 
   data->callback (data->result,
@@ -1956,7 +1955,7 @@ get_ppd_names_async_dbus_scb (GObject      *source_object,
 
   if (result)
     {
-      gchar **ppds_names;
+      g_auto(GStrv) ppds_names = NULL;
 
       data->result = result;
 
@@ -1969,8 +1968,6 @@ get_ppd_names_async_dbus_scb (GObject      *source_object,
                                 get_ppd_names_async_cb,
                                 data);
       g_steal_pointer (&data);
-
-      g_strfreev (ppds_names);
     }
   else
     {


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