commit: bb08a88c4e2db3ea1c713b3de987c3bed4229c54 Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org> AuthorDate: Thu Feb 25 10:15:35 2016 +0000 Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org> CommitDate: Thu Feb 25 10:15:35 2016 +0000 URL: https://gitweb.gentoo.org/proj/grs.git/commit/?id=bb08a88c
patch: fix dev-libs/glib-2.46.2-r1, bug #575614 .../patches/dev-libs/glib/glib-fix-ctors.patch | 112 +++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/core/etc/portage/patches/dev-libs/glib/glib-fix-ctors.patch b/core/etc/portage/patches/dev-libs/glib/glib-fix-ctors.patch new file mode 100644 index 0000000..ece936a --- /dev/null +++ b/core/etc/portage/patches/dev-libs/glib/glib-fix-ctors.patch @@ -0,0 +1,112 @@ +See: https://bugs.gentoo.org/show_bug.cgi?id=575614 + +From ca32c60a815f91a28e63993e9b53a2cfa0764240 Mon Sep 17 00:00:00 2001 +From: Natanael Copa <[email protected]> +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 +
