aboutsummaryrefslogtreecommitdiffstats
path: root/main/glib
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2016-07-07 10:55:19 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2016-07-07 10:58:54 +0200
commit6321ef7fe6e86df2bd03666e0feaa7bfbf80b52c (patch)
tree637038af4d9c2a01d2388de31a3d6b07bf82a79d /main/glib
parentdb000eb569c331c4dec598957b9e4d4bf6e107f2 (diff)
downloadaports-6321ef7fe6e86df2bd03666e0feaa7bfbf80b52c.tar.bz2
aports-6321ef7fe6e86df2bd03666e0feaa7bfbf80b52c.tar.xz
main/glib: simplify gquark fix
Diffstat (limited to 'main/glib')
-rw-r--r--main/glib/0001-gquark-fix-initialization-with-c-constructors.patch47
-rw-r--r--main/glib/0001-gquark-make-sure-quark-is-initialized-before-create-.patch52
-rw-r--r--main/glib/APKBUILD10
3 files changed, 52 insertions, 57 deletions
diff --git a/main/glib/0001-gquark-fix-initialization-with-c-constructors.patch b/main/glib/0001-gquark-fix-initialization-with-c-constructors.patch
new file mode 100644
index 0000000000..50a9a8c28a
--- /dev/null
+++ b/main/glib/0001-gquark-fix-initialization-with-c-constructors.patch
@@ -0,0 +1,47 @@
+From e4216dee57f5156e192b2910f13eb855a104cb18 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 6 Jul 2016 12:38:40 +0200
+Subject: [PATCH] gquark: fix initialization with c++ constructors
+
+C++ constructors may want create new quarks, but we can not guarantee
+that the glib library ctor is executed first. Therefore we make sure
+that quarks are always initialized from g_quark_from_string and
+g_quark_from_static_string
+
+This fixes crashes in glibmm with musl which likely happens on AIX too.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=768215
+https://bugzilla.gnome.org/show_bug.cgi?id=756139#c14
+---
+ glib/gquark.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/glib/gquark.c b/glib/gquark.c
+index 9e51a92..17ecd7f 100644
+--- a/glib/gquark.c
++++ b/glib/gquark.c
+@@ -57,6 +57,11 @@ static gint quark_block_offset = 0;
+ void
+ g_quark_init (void)
+ {
++ /* we may be initialized from c++ constructor or the glib ctor, but we
++ cannot guarantee in what order. So we check if we have been initialized */
++ if (quark_ht != NULL)
++ return;
++
+ 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);
+@@ -179,6 +184,9 @@ quark_from_string (const gchar *string,
+ {
+ GQuark quark = 0;
+
++ if (G_UNLIKELY (quark_ht == NULL))
++ g_quark_init();
++
+ quark = GPOINTER_TO_UINT (g_hash_table_lookup (quark_ht, string));
+
+ if (!quark)
+--
+2.9.0
+
diff --git a/main/glib/0001-gquark-make-sure-quark-is-initialized-before-create-.patch b/main/glib/0001-gquark-make-sure-quark-is-initialized-before-create-.patch
deleted file mode 100644
index 565581038f..0000000000
--- a/main/glib/0001-gquark-make-sure-quark-is-initialized-before-create-.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From bc7c6ec8184750289d9d9103a6bdd40adbf4627a Mon Sep 17 00:00:00 2001
-From: Natanael Copa <ncopa@alpinelinux.org>
-Date: Thu, 30 Jun 2016 09:48:20 +0200
-Subject: [PATCH] gquark: make sure quark is initialized before create new
- quark
-
-When g_quark_from_string/g_quark_from_static_string is used to
-initialize a global variable it may be called before glib_init's ctor.
-Make sure that quark is initialized in those cases.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=768215
----
- glib/gquark.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/glib/gquark.c b/glib/gquark.c
-index 9e51a92..2f145ae 100644
---- a/glib/gquark.c
-+++ b/glib/gquark.c
-@@ -57,6 +57,13 @@ static gint quark_block_offset = 0;
- void
- g_quark_init (void)
- {
-+ static gboolean quark_inited;
-+
-+ if (quark_inited)
-+ return;
-+
-+ quark_inited = TRUE;
-+
- 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);
-@@ -209,6 +216,7 @@ g_quark_from_string (const gchar *string)
- return 0;
-
- G_LOCK (quark_global);
-+ g_quark_init();
- quark = quark_from_string (string, TRUE);
- G_UNLOCK (quark_global);
-
-@@ -243,6 +251,7 @@ g_quark_from_static_string (const gchar *string)
- return 0;
-
- G_LOCK (quark_global);
-+ g_quark_init();
- quark = quark_from_string (string, FALSE);
- G_UNLOCK (quark_global);
-
---
-2.9.0
-
diff --git a/main/glib/APKBUILD b/main/glib/APKBUILD
index bc8ce17493..bd18a3e1ad 100644
--- a/main/glib/APKBUILD
+++ b/main/glib/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=glib
pkgver=2.48.1
-pkgrel=0
+pkgrel=1
pkgdesc="Common C routines used by Gtk+ and other libs"
url="http://www.gtk.org"
arch="all"
@@ -12,7 +12,7 @@ triggers="$pkgname.trigger=/usr/share/glib-2.0/schemas:/usr/lib/gio/modules"
depends_dev="perl python gettext-dev zlib-dev bzip2-dev libffi-dev"
makedepends="$depends_dev pcre-dev"
source="http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz
- 0001-gquark-make-sure-quark-is-initialized-before-create-.patch
+ 0001-gquark-fix-initialization-with-c-constructors.patch
"
subpackages="$pkgname-dbg $pkgname-doc $pkgname-dev $pkgname-lang $pkgname-bash-completion:bashcomp"
@@ -75,8 +75,8 @@ bashcomp() {
}
md5sums="67bd3b75c9f6d5587b457dc01cdcd5bb glib-2.48.1.tar.xz
-6eb959b045db81dc552edd2695911671 0001-gquark-make-sure-quark-is-initialized-before-create-.patch"
+6dc9823b4b7b7e6ae1de6fac1db5fb09 0001-gquark-fix-initialization-with-c-constructors.patch"
sha256sums="74411bff489cb2a3527bac743a51018841a56a4d896cc1e0d0d54f8166a14612 glib-2.48.1.tar.xz
-bdddb06d2a3aaccb5846e4a3f9ae1b052d6606384d6159c2d6bf3796e28759dc 0001-gquark-make-sure-quark-is-initialized-before-create-.patch"
+2024aa0723f657be4ade791acc4e8ca427f9a2caa1d82e0dd955494ee922ccba 0001-gquark-fix-initialization-with-c-constructors.patch"
sha512sums="5bbea7d07ba6d75c35c6be8f1ebc685aa2549bd20030741b2d6e2c30e9b2d476c2afa50a974bbdad98c305666c8b04357b51619c97fe50d3e9965700088aad9b glib-2.48.1.tar.xz
-8a9cd51ee9f557772e35614d42071e1197c0164d40503871e3e79e116bed6f6a5c8f82fd3f377b5e334f342d2d1df60d404ea0ed885989d7e3412b6795fb5469 0001-gquark-make-sure-quark-is-initialized-before-create-.patch"
+32e5aca9a315fb985fafa0b4355e4498c1f877fc1f0b58ad4ac261fb9fbced9f026c7756a5f2af7d61ce756b55c8cd02811bb08df397040e93510056f073756b 0001-gquark-fix-initialization-with-c-constructors.patch"