Imported Upstream version 2.51.4 06/130006/1
authorDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 19 May 2017 00:25:12 +0000 (09:25 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Fri, 19 May 2017 00:25:15 +0000 (09:25 +0900)
Change-Id: I0a090d45ab8f1805c5f98fd4d804da23a4033a41
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
NEWS
configure.ac
gio/glib-compile-schemas.c
gio/gsettings.c
gio/tests/gsettings.c
win32/Makefile.am

diff --git a/NEWS b/NEWS
index afe6a56..9e1bc2d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+Overview of changes in GLib 2.51.4
+==================================
+
+* Memory leak fixes
+* Fix the released tarball
+
+
 Overview of changes in GLib 2.51.3
 ==================================
 
index 954d86e..324388f 100644 (file)
@@ -31,7 +31,7 @@ m4_define(glib_configure_ac)
 
 m4_define([glib_major_version], [2])
 m4_define([glib_minor_version], [51])
-m4_define([glib_micro_version], [3])
+m4_define([glib_micro_version], [4])
 m4_define([glib_interface_age], [0])
 m4_define([glib_binary_age],
           [m4_eval(100 * glib_minor_version + glib_micro_version)])
index 833ae6b..e190ff5 100644 (file)
@@ -879,6 +879,7 @@ schema_state_free (gpointer data)
   g_free (state->path);
   g_free (state->gettext_domain);
   g_hash_table_unref (state->keys);
+  g_slice_free (SchemaState, state);
 }
 
 static void
@@ -1621,6 +1622,12 @@ gvdb_pair_init (GvdbPair *pair)
   pair->root = gvdb_hash_table_insert (pair->table, "");
 }
 
+static void
+gvdb_pair_clear (GvdbPair *pair)
+{
+  g_hash_table_unref (pair->table);
+}
+
 typedef struct
 {
   GHashTable *schema_table;
@@ -1643,6 +1650,7 @@ output_key (gpointer key,
   const gchar *name;
   KeyState *state;
   GvdbItem *item;
+  GVariant *serialised = NULL;
 
   name = key;
   state = value;
@@ -1650,7 +1658,9 @@ output_key (gpointer key,
 
   item = gvdb_hash_table_insert (data->pair.table, name);
   gvdb_item_set_parent (item, data->pair.root);
-  gvdb_item_set_value (item, key_state_serialise (state));
+  serialised = key_state_serialise (state);
+  gvdb_item_set_value (item, serialised);
+  g_variant_unref (serialised);
 
   if (state->l10n)
     data->l10n = TRUE;
@@ -1702,6 +1712,8 @@ output_schema (gpointer key,
     gvdb_hash_table_insert_string (data.pair.table,
                                    ".gettext-domain",
                                    state->gettext_domain);
+
+  gvdb_pair_clear (&data.pair);
 }
 
 static gboolean
@@ -1796,6 +1808,8 @@ parse_gschema_files (gchar    **files,
               g_hash_table_unref (state.flags_table);
               g_hash_table_unref (state.enum_table);
 
+              g_free (contents);
+
               return NULL;
             }
           else
@@ -1803,6 +1817,7 @@ parse_gschema_files (gchar    **files,
         }
 
       /* cleanup */
+      g_free (contents);
       g_markup_parse_context_free (context);
       g_slist_free (state.this_file_schemas);
       g_slist_free (state.this_file_flagss);
@@ -2020,19 +2035,20 @@ set_overrides (GHashTable  *schema_table,
 int
 main (int argc, char **argv)
 {
-  GError *error;
-  GHashTable *table;
-  GDir *dir;
+  GError *error = NULL;
+  GHashTable *table = NULL;
+  GDir *dir = NULL;
   const gchar *file;
-  gchar *srcdir;
+  const gchar *srcdir;
   gboolean show_version_and_exit = FALSE;
   gchar *targetdir = NULL;
-  gchar *target;
+  gchar *target = NULL;
   gboolean dry_run = FALSE;
   gboolean strict = FALSE;
   gchar **schema_files = NULL;
   gchar **override_files = NULL;
-  GOptionContext *context;
+  GOptionContext *context = NULL;
+  gint retval;
   GOptionEntry entries[] = {
     { "version", 0, 0, G_OPTION_ARG_NONE, &show_version_and_exit, N_("Show program version and exit"), NULL },
     { "targetdir", 0, 0, G_OPTION_ARG_FILENAME, &targetdir, N_("where to store the gschemas.compiled file"), N_("DIRECTORY") },
@@ -2046,7 +2062,7 @@ main (int argc, char **argv)
   };
 
 #ifdef G_OS_WIN32
-  gchar *tmp;
+  gchar *tmp = NULL;
 #endif
 
   setlocale (LC_ALL, "");
@@ -2055,7 +2071,6 @@ main (int argc, char **argv)
 #ifdef G_OS_WIN32
   tmp = _glib_get_locale_dir ();
   bindtextdomain (GETTEXT_PACKAGE, tmp);
-  g_free (tmp);
 #else
   bindtextdomain (GETTEXT_PACKAGE, GLIB_LOCALE_DIR);
 #endif
@@ -2072,33 +2087,30 @@ main (int argc, char **argv)
        "and the cache file is called gschemas.compiled."));
   g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
 
-  error = NULL;
   if (!g_option_context_parse (context, &argc, &argv, &error))
     {
       fprintf (stderr, "%s\n", error->message);
-      return 1;
+      retval = 1;
+      goto done;
     }
 
-  g_option_context_free (context);
-
   if (show_version_and_exit)
     {
       g_print (PACKAGE_VERSION "\n");
-      return 0;
+      retval = 0;
+      goto done;
     }
 
   if (!schema_files && argc != 2)
     {
       fprintf (stderr, _("You should give exactly one directory name\n"));
-      return 1;
+      retval = 1;
+      goto done;
     }
 
   srcdir = argv[1];
 
-  if (targetdir == NULL)
-    targetdir = srcdir;
-
-  target = g_build_filename (targetdir, "gschemas.compiled", NULL);
+  target = g_build_filename (targetdir ? targetdir : srcdir, "gschemas.compiled", NULL);
 
   if (!schema_files)
     {
@@ -2112,7 +2124,12 @@ main (int argc, char **argv)
       if (dir == NULL)
         {
           fprintf (stderr, "%s\n", error->message);
-          return 1;
+
+          g_ptr_array_unref (files);
+          g_ptr_array_unref (overrides);
+
+          retval = 1;
+          goto done;
         }
 
       while ((file = g_dir_read_name (dir)) != NULL)
@@ -2136,7 +2153,11 @@ main (int argc, char **argv)
           else
             fprintf (stdout, _("removed existing output file.\n"));
 
-          return 0;
+          g_ptr_array_unref (files);
+          g_ptr_array_unref (overrides);
+
+          retval = 0;
+          goto done;
         }
       g_ptr_array_sort (files, compare_strings);
       g_ptr_array_add (files, NULL);
@@ -2150,27 +2171,42 @@ main (int argc, char **argv)
 
   if ((table = parse_gschema_files (schema_files, strict)) == NULL)
     {
-      g_free (target);
-      return 1;
+      retval = 1;
+      goto done;
     }
 
   if (override_files != NULL &&
       !set_overrides (table, override_files, strict))
     {
-      g_free (target);
-      return 1;
+      retval = 1;
+      goto done;
     }
 
   if (!dry_run && !write_to_file (table, target, &error))
     {
       fprintf (stderr, "%s\n", error->message);
-      g_free (target);
-      return 1;
+      retval = 1;
+      goto done;
     }
 
+  /* Success. */
+  retval = 0;
+
+done:
+  g_clear_error (&error);
+  g_clear_pointer (&table, g_hash_table_unref);
+  g_clear_pointer (&dir, g_dir_close);
+  g_free (targetdir);
   g_free (target);
+  g_strfreev (schema_files);
+  g_strfreev (override_files);
+  g_option_context_free (context);
+
+#ifdef G_OS_WIN32
+  g_free (tmp);
+#endif
 
-  return 0;
+  return retval;
 }
 
 /* Epilogue {{{1 */
index 2b974e9..66c6f9b 100644 (file)
@@ -1571,6 +1571,7 @@ g_settings_set_value (GSettings   *settings,
   g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
   g_return_val_if_fail (key != NULL, FALSE);
 
+  g_variant_ref_sink (value);
   g_settings_schema_key_init (&skey, settings->priv->schema, key);
 
   if (!g_settings_schema_key_type_check (&skey, value))
@@ -1580,22 +1581,23 @@ g_settings_set_value (GSettings   *settings,
                   g_settings_schema_get_id (settings->priv->schema),
                   g_variant_type_peek_string (skey.type),
                   g_variant_get_type_string (value));
-
-        return FALSE;
-      }
-
-  if (!g_settings_schema_key_range_check (&skey, value))
+      success = FALSE;
+    }
+  else if (!g_settings_schema_key_range_check (&skey, value))
     {
       g_warning ("g_settings_set_value: value for key '%s' in schema '%s' "
                  "is outside of valid range",
                  key,
                  g_settings_schema_get_id (settings->priv->schema));
-
-        return FALSE;
+      success = FALSE;
+    }
+  else
+    {
+      success = g_settings_write_to_backend (settings, &skey, value);
     }
 
-  success = g_settings_write_to_backend (settings, &skey, value);
   g_settings_schema_key_clear (&skey);
+  g_variant_unref (value);
 
   return success;
 }
@@ -3271,6 +3273,7 @@ g_settings_action_finalize (GObject *object)
 
   g_signal_handlers_disconnect_by_data (gsa->settings, gsa);
   g_object_unref (gsa->settings);
+  g_settings_schema_key_clear (&gsa->key);
 
   G_OBJECT_CLASS (g_settings_action_parent_class)
     ->finalize (object);
index 18d28c2..b1bbd4e 100644 (file)
@@ -2373,10 +2373,8 @@ test_schema_list_keys (void)
                             "farewell",
                             NULL));
 
-
   g_strfreev (keys);
   g_settings_schema_unref (schema);
-  g_settings_schema_source_unref (src);
 }
 
 static void
@@ -2440,6 +2438,8 @@ test_actions (void)
   g_assert_cmpstr (g_variant_get_string (state, NULL), ==, "kthxbye");
 
   g_free (name);
+  g_variant_type_free (param_type);
+  g_variant_type_free (state_type);
   g_variant_unref (state);
 
   g_object_unref (string);
@@ -2629,6 +2629,7 @@ main (int argc, char *argv[])
 
       g_assert (g_file_get_contents (SRCDIR "/org.gtk.test.gschema.xml.orig", &schema_text, NULL, NULL));
       g_assert (g_file_set_contents ("org.gtk.test.gschema.xml", schema_text, -1, NULL));
+      g_free (schema_text);
 
       g_remove ("gschemas.compiled");
       g_assert (g_spawn_command_line_sync ("../glib-compile-schemas --targetdir=. "
index 44a6345..3a08bd5 100644 (file)
@@ -1,4 +1,4 @@
-SUBDIRS = vs9 vs10 vs11 vs12 vs14
+SUBDIRS = vs9 vs10 vs11 vs12 vs14 vs15
 
 EXTRA_DIST =           \
        glibpc.py       \