Update to 2.37.0

This commit is contained in:
Kalev Lember 2013-05-03 22:11:01 +02:00
parent 7bf8211082
commit 2d0f25ec3e
3 changed files with 7 additions and 141 deletions

View File

@ -1,133 +0,0 @@
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

View File

@ -1,15 +1,12 @@
Summary: A library of handy utility functions
Name: glib2
Version: 2.36.1
Release: 2%{?dist}
Version: 2.37.0
Release: 1%{?dist}
License: LGPLv2+
Group: System Environment/Libraries
URL: http://www.gtk.org
#VCS: git:git://git.gnome.org/glib
Source: http://download.gnome.org/sources/glib/2.36/glib-%{version}.tar.xz
# patch0 was is commit eb860fd on master and f3b1054b in 2.36
# backgrounds: https://bugzilla.gnome.org/show_bug.cgi?id=698081
Patch0: %{name}-partially_revert_merge_waitpid_from_g_spawn_sync_into_gmain.patch
Source: http://download.gnome.org/sources/glib/2.37/glib-%{version}.tar.xz
BuildRequires: pkgconfig
BuildRequires: gettext
@ -67,7 +64,6 @@ The glib2-fam package contains the FAM (File Alteration Monitor) module for GIO.
%prep
%setup -q -n glib-%{version}
%patch0 -p1 -b .patch0
%build
# Support builds of both git snapshots and tarballs packed with autogoo
@ -188,6 +184,9 @@ gio-querymodules-%{__isa_bits} %{_libdir}/gio/modules
%{_libdir}/gio/modules/libgiofam.so
%changelog
* Sat May 04 2013 Kalev Lember <kalevlember@gmail.com> - 2.37.0-1
- Update to 2.37.0
* Sat Apr 27 2013 Thorsten Leemhuis <fedora@leemhuis.info> - 2.36.1-2
- Fix pidgin freezes by applying patch from master (#956872)

View File

@ -1 +1 @@
a3bbee44a13facb5a3cab18be5ece14c glib-2.36.1.tar.xz
a2dabe3887b05abd0fd4ae1c276f080c glib-2.37.0.tar.xz