summaryrefslogtreecommitdiff
path: root/core/glib2
diff options
context:
space:
mode:
Diffstat (limited to 'core/glib2')
-rw-r--r--core/glib2/PKGBUILD20
-rw-r--r--core/glib2/gvariant-fix-annotation.patch25
-rw-r--r--core/glib2/partially-revert-ce0022933c255313e010b27f977f4ae02aad1e7e.patch132
3 files changed, 173 insertions, 4 deletions
diff --git a/core/glib2/PKGBUILD b/core/glib2/PKGBUILD
index d277d9892..50260971f 100644
--- a/core/glib2/PKGBUILD
+++ b/core/glib2/PKGBUILD
@@ -1,21 +1,33 @@
-# $Id: PKGBUILD 183313 2013-04-21 22:06:25Z heftig $
+# $Id: PKGBUILD 183737 2013-04-27 14:20:45Z jgc $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgbase=glib2
pkgname=(glib2 glib2-docs)
pkgver=2.36.1
-pkgrel=1
+pkgrel=3
pkgdesc="Common C routines used by GTK+ and other libs"
url="http://www.gtk.org/"
arch=(i686 x86_64)
makedepends=('pkg-config' 'python2' 'libxslt' 'docbook-xml' 'pcre' 'libffi' 'elfutils')
source=(http://ftp.gnome.org/pub/GNOME/sources/glib/${pkgver%.*}/glib-$pkgver.tar.xz
- revert-warn-glib-compile-schemas.patch)
+ revert-warn-glib-compile-schemas.patch
+ gvariant-fix-annotation.patch
+ partially-revert-ce0022933c255313e010b27f977f4ae02aad1e7e.patch)
sha256sums=('7de37586794e92c024feebe5d306bf5f245fef4803c3666af1ae8dac6ee10b24'
- '049240975cd2f1c88fbe7deb28af14d4ec7d2640495f7ca8980d873bb710cc97')
+ '049240975cd2f1c88fbe7deb28af14d4ec7d2640495f7ca8980d873bb710cc97'
+ 'ebbb0581322b1fc546f93f9d77f39f37584004086d2f6f2637a8bb7894e36b2b'
+ '5928ac4fd114cda846fe38a3b8bedc5b038dbf9e47f76029af7d75e5dc8ae5be')
build() {
cd glib-$pkgver
+
+ # fix FS#34630 https://bugs.archlinux.org/task/34630
+ export CFLAGS+=" -Wall"
+
+ # Upstream fixes from 2.36 branch
+ patch -Np1 -i ../gvariant-fix-annotation.patch
+ patch -Np1 -i ../partially-revert-ce0022933c255313e010b27f977f4ae02aad1e7e.patch
+
patch -Rp1 -i ../revert-warn-glib-compile-schemas.patch
PYTHON=/usr/bin/python2 ./configure --prefix=/usr --libdir=/usr/lib \
--sysconfdir=/etc \
diff --git a/core/glib2/gvariant-fix-annotation.patch b/core/glib2/gvariant-fix-annotation.patch
new file mode 100644
index 000000000..ee10312c8
--- /dev/null
+++ b/core/glib2/gvariant-fix-annotation.patch
@@ -0,0 +1,25 @@
+From 7304bbd5d8ad56dcf3ee9fadf74f6104c49d4df7 Mon Sep 17 00:00:00 2001
+From: Giovanni Campagna <gcampagna@src.gnome.org>
+Date: Fri, 12 Apr 2013 15:25:15 +0000
+Subject: GVariant: fix transfer annotation
+
+g_variant_new_from_bytes() returns a floating reference, so it
+must be annotated (transfer none)
+
+https://bugzilla.gnome.org/show_bug.cgi?id=697887
+---
+diff --git a/glib/gvariant-core.c b/glib/gvariant-core.c
+index b96bc90..f823e01 100644
+--- a/glib/gvariant-core.c
++++ b/glib/gvariant-core.c
+@@ -498,7 +498,7 @@ g_variant_alloc (const GVariantType *type,
+ *
+ * A reference is taken on @bytes.
+ *
+- * Returns: a new #GVariant with a floating reference
++ * Returns: (transfer none): a new #GVariant with a floating reference
+ *
+ * Since: 2.36
+ */
+--
+cgit v0.9.1
diff --git a/core/glib2/partially-revert-ce0022933c255313e010b27f977f4ae02aad1e7e.patch b/core/glib2/partially-revert-ce0022933c255313e010b27f977f4ae02aad1e7e.patch
new file mode 100644
index 000000000..f623c1b21
--- /dev/null
+++ b/core/glib2/partially-revert-ce0022933c255313e010b27f977f4ae02aad1e7e.patch
@@ -0,0 +1,132 @@
+From f3b1054b0ebb4912f700e08da0c3d35c30113e79 Mon Sep 17 00:00:00 2001
+From: Ryan Lortie <desrt@desrt.ca>
+Date: Tue, 23 Apr 2013 17:26:48 +0000
+Subject: Partially revert "Merge waitpid() from g_spawn_sync into gmain()"
+
+This partially reverts commit ce0022933c255313e010b27f977f4ae02aad1e7e.
+
+It used to be safe to use g_spawn_sync() from processes that had their
+own SIGCHLD handler because it simply called wait(). When it was
+changed to depend on the GLib child watching infrastructure this meant
+that GLib had to own the SIGCHLD handler.
+
+This caused hangs in at least Pidgin.
+
+The patch contained two other improvements to the child watch code which
+we want to keep, so only revert the changes to gspawn itself.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=698081
+---
+diff --git a/glib/gspawn.c b/glib/gspawn.c
+index 381ed5c..01cedf6 100644
+--- a/glib/gspawn.c
++++ b/glib/gspawn.c
+@@ -47,7 +47,6 @@
+
+ #include "genviron.h"
+ #include "gmem.h"
+-#include "gmain.h"
+ #include "gshell.h"
+ #include "gstring.h"
+ #include "gstrfuncs.h"
+@@ -207,21 +206,6 @@ read_data (GString *str,
+ }
+ }
+
+-typedef struct {
+- GMainLoop *loop;
+- gint *status_p;
+-} SyncWaitpidData;
+-
+-static void
+-on_sync_waitpid (GPid pid,
+- gint status,
+- gpointer user_data)
+-{
+- SyncWaitpidData *data = user_data;
+- *(data->status_p) = status;
+- g_main_loop_quit (data->loop);
+-}
+-
+ /**
+ * g_spawn_sync:
+ * @working_directory: (allow-none): child's current working directory, or %NULL to inherit parent's
+@@ -277,7 +261,6 @@ g_spawn_sync (const gchar *working_directory,
+ GString *errstr = NULL;
+ gboolean failed;
+ gint status;
+- SyncWaitpidData waitpid_data;
+
+ g_return_val_if_fail (argv != NULL, FALSE);
+ g_return_val_if_fail (!(flags & G_SPAWN_DO_NOT_REAP_CHILD), FALSE);
+@@ -410,32 +393,45 @@ g_spawn_sync (const gchar *working_directory,
+ close_and_invalidate (&outpipe);
+ if (errpipe >= 0)
+ close_and_invalidate (&errpipe);
+-
+- /* Now create a temporary main context and loop, with just one
+- * waitpid source. We used to invoke waitpid() directly here, but
+- * this way we unify with the worker thread in gmain.c.
++
++ /* Wait for child to exit, even if we have
++ * an error pending.
+ */
+- {
+- GMainContext *context;
+- GMainLoop *loop;
+- GSource *source;
+-
+- context = g_main_context_new ();
+- loop = g_main_loop_new (context, TRUE);
++ again:
++
++ ret = waitpid (pid, &status, 0);
+
+- waitpid_data.loop = loop;
+- waitpid_data.status_p = &status;
+-
+- source = g_child_watch_source_new (pid);
+- g_source_set_callback (source, (GSourceFunc)on_sync_waitpid, &waitpid_data, NULL);
+- g_source_attach (source, context);
+- g_source_unref (source);
+-
+- g_main_loop_run (loop);
++ if (ret < 0)
++ {
++ if (errno == EINTR)
++ goto again;
++ else if (errno == ECHILD)
++ {
++ if (exit_status)
++ {
++ g_warning ("In call to g_spawn_sync(), exit status of a child process was requested but ECHILD was received by waitpid(). Most likely the process is ignoring SIGCHLD, or some other thread is invoking waitpid() with a nonpositive first argument; either behavior can break applications that use g_spawn_sync either directly or indirectly.");
++ }
++ else
++ {
++ /* We don't need the exit status. */
++ }
++ }
++ else
++ {
++ if (!failed) /* avoid error pileups */
++ {
++ int errsv = errno;
+
+- g_main_context_unref (context);
+- g_main_loop_unref (loop);
+- }
++ failed = TRUE;
++
++ g_set_error (error,
++ G_SPAWN_ERROR,
++ G_SPAWN_ERROR_READ,
++ _("Unexpected error in waitpid() (%s)"),
++ g_strerror (errsv));
++ }
++ }
++ }
+
+ if (failed)
+ {
+--
+cgit v0.9.1