pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/devel/glib2 Revert GHashTable improvements



details:   https://anonhg.NetBSD.org/pkgsrc/rev/f7e1c00eda89
branches:  trunk
changeset: 335550:f7e1c00eda89
user:      prlw1 <prlw1%pkgsrc.org@localhost>
date:      Fri Jun 21 20:20:59 2019 +0000

description:
Revert GHashTable improvements
https://gitlab.gnome.org/GNOME/glib/merge_requests/208

to fix PR pkg/54310

For the record, the patch was created with:
git checkout -f 2.60.4
git revert --no-edit 86c6f7e2b..3bed8a13b
git revert --no-edit 75f8ec1df9b48b0c3a13a9125f2c7d7c5adf5159
git revert --no-edit 603fb5958..d3074a748
git revert --no-edit 0b45ddc55..0600dd322
git diff 2.60.4

diffstat:

 devel/glib2/Makefile                               |    4 +-
 devel/glib2/distinfo                               |    5 +-
 devel/glib2/patches/patch-gio_tests_gdbus-export.c |   70 +
 devel/glib2/patches/patch-glib_ghash.c             |  873 +++++++++++++++++++++
 devel/glib2/patches/patch-glib_tests_hash.c        |   60 +
 5 files changed, 1009 insertions(+), 3 deletions(-)

diffs (truncated from 1050 to 300 lines):

diff -r 17be9e3bf626 -r f7e1c00eda89 devel/glib2/Makefile
--- a/devel/glib2/Makefile      Fri Jun 21 17:10:43 2019 +0000
+++ b/devel/glib2/Makefile      Fri Jun 21 20:20:59 2019 +0000
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.253 2019/06/16 15:28:11 leot Exp $
+# $NetBSD: Makefile,v 1.254 2019/06/21 20:20:59 prlw1 Exp $
 
 .include "Makefile.common"
 
-PKGREVISION=   1
+PKGREVISION=   2
 CATEGORIES=    devel gnome
 COMMENT=       Some useful routines for C programming (glib2)
 
diff -r 17be9e3bf626 -r f7e1c00eda89 devel/glib2/distinfo
--- a/devel/glib2/distinfo      Fri Jun 21 17:10:43 2019 +0000
+++ b/devel/glib2/distinfo      Fri Jun 21 20:20:59 2019 +0000
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.247 2019/06/18 13:05:14 jperkin Exp $
+$NetBSD: distinfo,v 1.248 2019/06/21 20:20:59 prlw1 Exp $
 
 SHA1 (glib-2.60.4.tar.xz) = f76ef7339fef5784d79520478110caa4c5054806
 RMD160 (glib-2.60.4.tar.xz) = e8520dd0da7c37e6bb18b24a3b3ec308a6fa6aa0
@@ -12,8 +12,11 @@
 SHA1 (patch-gio_gunixmounts.c) = 13af07fffe898457edd0d8db4296a60fccba913d
 SHA1 (patch-gio_inotify_inotify-kernel.c) = 24deec33a1ad5e3c1a4f2d1397440d26b0f23b84
 SHA1 (patch-gio_meson.build) = a0dcda4e9d05ed83b7fb11102945821eea27b81d
+SHA1 (patch-gio_tests_gdbus-export.c) = 59d85ca079d02b52e33153c7d2ac1cc48c26707a
+SHA1 (patch-glib_ghash.c) = 938135c3a71199e61d1cd1dffa6e1d63864150d6
 SHA1 (patch-glib_gmain.c) = 2ab4b59e438d9f764bee62e0c1fa8bbd231b6e8d
 SHA1 (patch-glib_meson.build) = 119e48efd8aaabf06b62c6e1897261b470cf7355
+SHA1 (patch-glib_tests_hash.c) = e928b22926ad917a7a201882a5105b25533554ae
 SHA1 (patch-gmodule_gmodule-ar.c) = e382a0ada232e083d51cbede7f689a50ebeff4d8
 SHA1 (patch-gmodule_gmodule-dl.c) = b678a04debbc79ebb67d91db7716990658e76da4
 SHA1 (patch-gmodule_gmodule-dyld.c) = 5adf62970d9cff22d451307aaa0b00d975dab138
diff -r 17be9e3bf626 -r f7e1c00eda89 devel/glib2/patches/patch-gio_tests_gdbus-export.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/glib2/patches/patch-gio_tests_gdbus-export.c        Fri Jun 21 20:20:59 2019 +0000
@@ -0,0 +1,70 @@
+$NetBSD: patch-gio_tests_gdbus-export.c,v 1.1 2019/06/21 20:21:00 prlw1 Exp $
+
+Revert GHashTable improvements
+https://gitlab.gnome.org/GNOME/glib/merge_requests/208
+
+to fix PR pkg/54310
+
+--- gio/tests/gdbus-export.c.orig      2019-06-10 17:47:20.000000000 +0000
++++ gio/tests/gdbus-export.c
+@@ -337,22 +337,6 @@ introspect_callback (GDBusProxy   *proxy
+   g_main_loop_quit (loop);
+ }
+ 
+-static gint
+-compare_strings (gconstpointer a,
+-                 gconstpointer b)
+-{
+-  const gchar *sa = *(const gchar **) a;
+-  const gchar *sb = *(const gchar **) b;
+-
+-  /* Array terminator must sort last */
+-  if (sa == NULL)
+-    return 1;
+-  if (sb == NULL)
+-    return -1;
+-
+-  return strcmp (sa, sb);
+-}
+-
+ static gchar **
+ get_nodes_at (GDBusConnection  *c,
+               const gchar      *object_path)
+@@ -406,9 +390,6 @@ get_nodes_at (GDBusConnection  *c,
+   g_free (xml_data);
+   g_dbus_node_info_unref (node_info);
+ 
+-  /* Nodes are semantically unordered; sort array so tests can rely on order */
+-  g_ptr_array_sort (p, compare_strings);
+-
+   return (gchar **) g_ptr_array_free (p, FALSE);
+ }
+ 
+@@ -1259,9 +1240,9 @@ test_object_registration (void)
+   nodes = get_nodes_at (c, "/foo/dyna");
+   g_assert (nodes != NULL);
+   g_assert_cmpint (g_strv_length (nodes), ==, 3);
+-  g_assert_cmpstr (nodes[0], ==, "cat");
+-  g_assert_cmpstr (nodes[1], ==, "cheezburger");
+-  g_assert_cmpstr (nodes[2], ==, "lol");
++  g_assert_cmpstr (nodes[0], ==, "lol");
++  g_assert_cmpstr (nodes[1], ==, "cat");
++  g_assert_cmpstr (nodes[2], ==, "cheezburger");
+   g_strfreev (nodes);
+   g_assert_cmpint (count_interfaces (c, "/foo/dyna/lol"), ==, 4);
+   g_assert_cmpint (count_interfaces (c, "/foo/dyna/cat"), ==, 4);
+@@ -1272,10 +1253,10 @@ test_object_registration (void)
+   nodes = get_nodes_at (c, "/foo/dyna");
+   g_assert (nodes != NULL);
+   g_assert_cmpint (g_strv_length (nodes), ==, 4);
+-  g_assert_cmpstr (nodes[0], ==, "cat");
+-  g_assert_cmpstr (nodes[1], ==, "cheezburger");
+-  g_assert_cmpstr (nodes[2], ==, "dynamicallycreated");
+-  g_assert_cmpstr (nodes[3], ==, "lol");
++  g_assert_cmpstr (nodes[0], ==, "lol");
++  g_assert_cmpstr (nodes[1], ==, "cat");
++  g_assert_cmpstr (nodes[2], ==, "cheezburger");
++  g_assert_cmpstr (nodes[3], ==, "dynamicallycreated");
+   g_strfreev (nodes);
+   g_assert_cmpint (count_interfaces (c, "/foo/dyna/dynamicallycreated"), ==, 4);
+ 
diff -r 17be9e3bf626 -r f7e1c00eda89 devel/glib2/patches/patch-glib_ghash.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/devel/glib2/patches/patch-glib_ghash.c    Fri Jun 21 20:20:59 2019 +0000
@@ -0,0 +1,873 @@
+$NetBSD: patch-glib_ghash.c,v 1.1 2019/06/21 20:21:00 prlw1 Exp $
+
+Revert GHashTable improvements
+https://gitlab.gnome.org/GNOME/glib/merge_requests/208
+
+to fix PR pkg/54310
+
+--- glib/ghash.c.orig  2019-06-10 17:47:20.000000000 +0000
++++ glib/ghash.c
+@@ -38,26 +38,6 @@
+ #include "gtestutils.h"
+ #include "gslice.h"
+ #include "grefcount.h"
+-#include "gvalgrind.h"
+-
+-/* The following #pragma is here so we can do this...
+- *
+- *   #ifndef USE_SMALL_ARRAYS
+- *     is_big = TRUE;
+- *   #endif
+- *     return is_big ? *(((gpointer *) a) + index) : GUINT_TO_POINTER (*(((guint *) a) + index));
+- *
+- * ...instead of this...
+- *
+- *   #ifndef USE_SMALL_ARRAYS
+- *     return *(((gpointer *) a) + index);
+- *   #else
+- *     return is_big ? *(((gpointer *) a) + index) : GUINT_TO_POINTER (*(((guint *) a) + index));
+- *   #endif
+- *
+- * ...and still compile successfully when -Werror=duplicated-branches is passed. */
+-
+-#pragma GCC diagnostic ignored "-Wduplicated-branches"
+ 
+ /**
+  * SECTION:hash_tables
+@@ -233,18 +213,6 @@
+ #define HASH_IS_TOMBSTONE(h_) ((h_) == TOMBSTONE_HASH_VALUE)
+ #define HASH_IS_REAL(h_) ((h_) >= 2)
+ 
+-/* If int is smaller than void * on our arch, we start out with
+- * int-sized keys and values and resize to pointer-sized entries as
+- * needed. This saves a good amount of memory when the HT is being
+- * used with e.g. GUINT_TO_POINTER(). */
+-
+-#define BIG_ENTRY_SIZE (SIZEOF_VOID_P)
+-#define SMALL_ENTRY_SIZE (SIZEOF_INT)
+-
+-#if SMALL_ENTRY_SIZE < BIG_ENTRY_SIZE
+-# define USE_SMALL_ARRAYS
+-#endif
+-
+ struct _GHashTable
+ {
+   gint             size;
+@@ -253,12 +221,9 @@ struct _GHashTable
+   gint             nnodes;
+   gint             noccupied;  /* nnodes + tombstones */
+ 
+-  guint            have_big_keys : 1;
+-  guint            have_big_values : 1;
+-
+-  gpointer         keys;
++  gpointer        *keys;
+   guint           *hashes;
+-  gpointer         values;
++  gpointer        *values;
+ 
+   GHashFunc        hash_func;
+   GEqualFunc       key_equal_func;
+@@ -332,15 +297,19 @@ static const gint prime_mod [] =
+ static void
+ g_hash_table_set_shift (GHashTable *hash_table, gint shift)
+ {
++  gint i;
++  guint mask = 0;
++
+   hash_table->size = 1 << shift;
+   hash_table->mod  = prime_mod [shift];
+ 
+-  /* hash_table->size is always a power of two, so we can calculate the mask
+-   * by simply subtracting 1 from it. The leading assertion ensures that
+-   * we're really dealing with a power of two. */
++  for (i = 0; i < shift; i++)
++    {
++      mask <<= 1;
++      mask |= 1;
++    }
+ 
+-  g_assert ((hash_table->size & (hash_table->size - 1)) == 0);
+-  hash_table->mask = hash_table->size - 1;
++  hash_table->mask = mask;
+ }
+ 
+ static gint
+@@ -365,67 +334,6 @@ g_hash_table_set_shift_from_size (GHashT
+   g_hash_table_set_shift (hash_table, shift);
+ }
+ 
+-static inline gpointer
+-g_hash_table_realloc_key_or_value_array (gpointer a, guint size, G_GNUC_UNUSED gboolean is_big)
+-{
+-#ifdef USE_SMALL_ARRAYS
+-  return g_realloc (a, size * (is_big ? BIG_ENTRY_SIZE : SMALL_ENTRY_SIZE));
+-#else
+-  return g_renew (gpointer, a, size);
+-#endif
+-}
+-
+-static inline gpointer
+-g_hash_table_fetch_key_or_value (gpointer a, guint index, gboolean is_big)
+-{
+-#ifndef USE_SMALL_ARRAYS
+-  is_big = TRUE;
+-#endif
+-  return is_big ? *(((gpointer *) a) + index) : GUINT_TO_POINTER (*(((guint *) a) + index));
+-}
+-
+-static inline void
+-g_hash_table_assign_key_or_value (gpointer a, guint index, gboolean is_big, gpointer v)
+-{
+-#ifndef USE_SMALL_ARRAYS
+-  is_big = TRUE;
+-#endif
+-  if (is_big)
+-    *(((gpointer *) a) + index) = v;
+-  else
+-    *(((guint *) a) + index) = GPOINTER_TO_UINT (v);
+-}
+-
+-static inline gpointer
+-g_hash_table_evict_key_or_value (gpointer a, guint index, gboolean is_big, gpointer v)
+-{
+-#ifndef USE_SMALL_ARRAYS
+-  is_big = TRUE;
+-#endif
+-  if (is_big)
+-    {
+-      gpointer r = *(((gpointer *) a) + index);
+-      *(((gpointer *) a) + index) = v;
+-      return r;
+-    }
+-  else
+-    {
+-      gpointer r = GUINT_TO_POINTER (*(((guint *) a) + index));
+-      *(((guint *) a) + index) = GPOINTER_TO_UINT (v);
+-      return r;
+-    }
+-}
+-
+-static inline guint
+-g_hash_table_hash_to_index (GHashTable *hash_table, guint hash)
+-{
+-  /* Multiply the hash by a small prime before applying the modulo. This
+-   * prevents the table from becoming densely packed, even with a poor hash
+-   * function. A densely packed table would have poor performance on
+-   * workloads with many failed lookups or a high degree of churn. */
+-  return (hash * 11) % hash_table->mod;
+-}
+-
+ /*
+  * g_hash_table_lookup_node:
+  * @hash_table: our #GHashTable
+@@ -474,7 +382,7 @@ g_hash_table_lookup_node (GHashTable    
+ 
+   *hash_return = hash_value;
+ 
+-  node_index = g_hash_table_hash_to_index (hash_table, hash_value);
++  node_index = hash_value % hash_table->mod;
+   node_hash = hash_table->hashes[node_index];
+ 
+   while (!HASH_IS_UNUSED (node_hash))
+@@ -485,7 +393,7 @@ g_hash_table_lookup_node (GHashTable    
+        */
+       if (node_hash == hash_value)
+         {
+-          gpointer node_key = g_hash_table_fetch_key_or_value (hash_table->keys, node_index, hash_table->have_big_keys);
++          gpointer node_key = hash_table->keys[node_index];
+ 
+           if (hash_table->key_equal_func)
+             {
+@@ -535,15 +443,15 @@ g_hash_table_remove_node (GHashTable   *
+   gpointer key;
+   gpointer value;
+ 
+-  key = g_hash_table_fetch_key_or_value (hash_table->keys, i, hash_table->have_big_keys);
+-  value = g_hash_table_fetch_key_or_value (hash_table->values, i, hash_table->have_big_values);



Home | Main Index | Thread Index | Old Index