diff --git a/glib2-partially_revert_merge_waitpid_from_g_spawn_sync_into_gmain.patch b/glib2-partially_revert_merge_waitpid_from_g_spawn_sync_into_gmain.patch deleted file mode 100644 index 848ffea..0000000 --- a/glib2-partially_revert_merge_waitpid_from_g_spawn_sync_into_gmain.patch +++ /dev/null @@ -1,133 +0,0 @@ -From f3b1054b0ebb4912f700e08da0c3d35c30113e79 Mon Sep 17 00:00:00 2001 -From: Ryan Lortie -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 - diff --git a/glib2.spec b/glib2.spec index 51a3f51..de68cd8 100644 --- a/glib2.spec +++ b/glib2.spec @@ -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 - 2.37.0-1 +- Update to 2.37.0 + * Sat Apr 27 2013 Thorsten Leemhuis - 2.36.1-2 - Fix pidgin freezes by applying patch from master (#956872) diff --git a/sources b/sources index ea6aa07..6fb2e55 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a3bbee44a13facb5a3cab18be5ece14c glib-2.36.1.tar.xz +a2dabe3887b05abd0fd4ae1c276f080c glib-2.37.0.tar.xz