aboutsummaryrefslogtreecommitdiffstats
path: root/main/glib/0001-Revert-Move-quark-initialization-to-a-constructor.patch
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2015-10-02 08:14:36 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2015-10-02 09:10:12 +0200
commitffda174b5508f59adbe44547cc97e7a1c436671e (patch)
tree7257fc8a3549f006830ad46e73bb57538fa643c0 /main/glib/0001-Revert-Move-quark-initialization-to-a-constructor.patch
parente6a76917b3439ee7837f07cd680a8a8d1ba3c179 (diff)
downloadaports-ffda174b5508f59adbe44547cc97e7a1c436671e.tar.bz2
aports-ffda174b5508f59adbe44547cc97e7a1c436671e.tar.xz
main/glib: revert move quark initialization to a contructor
building gobject-introspection fails without this fix: (process:31102): GLib-CRITICAL **: g_hash_table_lookup: assertion 'hash_table != NULL' failed GLib-GObject:ERROR:gtype.c:2747:g_type_register_static: assertion failed: (static_quark_type_flags)
Diffstat (limited to 'main/glib/0001-Revert-Move-quark-initialization-to-a-constructor.patch')
-rw-r--r--main/glib/0001-Revert-Move-quark-initialization-to-a-constructor.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/main/glib/0001-Revert-Move-quark-initialization-to-a-constructor.patch b/main/glib/0001-Revert-Move-quark-initialization-to-a-constructor.patch
new file mode 100644
index 0000000000..70ccc350bc
--- /dev/null
+++ b/main/glib/0001-Revert-Move-quark-initialization-to-a-constructor.patch
@@ -0,0 +1,110 @@
+From ca32c60a815f91a28e63993e9b53a2cfa0764240 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Fri, 2 Oct 2015 08:11:53 +0200
+Subject: [PATCH] Revert "Move quark initialization to a constructor"
+
+musl's does not run ctors in the assumed order that glib-2.46 expects:
+
+- glib_init() should be called before gobject_init_ctor().
+
+This reverts commit 2fe992b099bfd3fb121a71b7af43e116b2142b5d.
+---
+ glib/glib-init.c | 1 -
+ glib/glib-init.h | 2 --
+ glib/gquark.c | 26 ++++++++++++--------------
+ 3 files changed, 12 insertions(+), 17 deletions(-)
+
+diff --git a/glib/glib-init.c b/glib/glib-init.c
+index e7002e6..24efe9d 100644
+--- a/glib/glib-init.c
++++ b/glib/glib-init.c
+@@ -233,7 +233,6 @@ glib_init (void)
+ {
+ g_messages_prefixed_init ();
+ g_debug_init ();
+- g_quark_init ();
+ }
+
+ #if defined (G_OS_WIN32)
+diff --git a/glib/glib-init.h b/glib/glib-init.h
+index b56f7e2..de6be78 100644
+--- a/glib/glib-init.h
++++ b/glib/glib-init.h
+@@ -25,8 +25,6 @@
+ extern GLogLevelFlags g_log_always_fatal;
+ extern GLogLevelFlags g_log_msg_prefix;
+
+-void g_quark_init (void);
+-
+ #ifdef G_OS_WIN32
+ #include <windows.h>
+
+diff --git a/glib/gquark.c b/glib/gquark.c
+index 9e51a92..d620533 100644
+--- a/glib/gquark.c
++++ b/glib/gquark.c
+@@ -40,7 +40,6 @@
+ #include "gthread.h"
+ #include "gtestutils.h"
+ #include "glib_trace.h"
+-#include "glib-init.h"
+
+ #define QUARK_BLOCK_SIZE 2048
+ #define QUARK_STRING_BLOCK_SIZE (4096 - sizeof (gsize))
+@@ -54,16 +53,6 @@ static gint quark_seq_id = 0;
+ static gchar *quark_block = NULL;
+ static gint quark_block_offset = 0;
+
+-void
+-g_quark_init (void)
+-{
+- g_assert (quark_seq_id == 0);
+- quark_ht = g_hash_table_new (g_str_hash, g_str_equal);
+- quarks = g_new (gchar*, QUARK_BLOCK_SIZE);
+- quarks[0] = NULL;
+- quark_seq_id = 1;
+-}
+-
+ /**
+ * SECTION:quarks
+ * @title: Quarks
+@@ -138,9 +127,10 @@ g_quark_try_string (const gchar *string)
+ return 0;
+
+ G_LOCK (quark_global);
+- quark = GPOINTER_TO_UINT (g_hash_table_lookup (quark_ht, string));
++ if (quark_ht)
++ quark = GPOINTER_TO_UINT (g_hash_table_lookup (quark_ht, string));
+ G_UNLOCK (quark_global);
+-
++
+ return quark;
+ }
+
+@@ -179,7 +169,8 @@ quark_from_string (const gchar *string,
+ {
+ GQuark quark = 0;
+
+- quark = GPOINTER_TO_UINT (g_hash_table_lookup (quark_ht, string));
++ if (quark_ht)
++ quark = GPOINTER_TO_UINT (g_hash_table_lookup (quark_ht, string));
+
+ if (!quark)
+ {
+@@ -292,6 +283,13 @@ quark_new (gchar *string)
+ */
+ g_atomic_pointer_set (&quarks, quarks_new);
+ }
++ if (!quark_ht)
++ {
++ g_assert (quark_seq_id == 0);
++ quark_ht = g_hash_table_new (g_str_hash, g_str_equal);
++ quarks[quark_seq_id] = NULL;
++ g_atomic_int_inc (&quark_seq_id);
++ }
+
+ quark = quark_seq_id;
+ g_atomic_pointer_set (&quarks[quark], string);
+--
+2.6.0
+