From 087ef3ba0f761075383df46eae90e76cf7e3fea4 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Thu, 18 Jan 2018 11:43:48 +0100 Subject: [PATCH] gmain: Partial revert of recent wakeup changes https://bugzilla.gnome.org/show_bug.cgi?id=761102 --- ...vert-of-recent-wakeup-changes-to-gma.patch | 106 ++++++++++++++++++ glib2.spec | 9 +- 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 0001-gmain-Partial-revert-of-recent-wakeup-changes-to-gma.patch diff --git a/0001-gmain-Partial-revert-of-recent-wakeup-changes-to-gma.patch b/0001-gmain-Partial-revert-of-recent-wakeup-changes-to-gma.patch new file mode 100644 index 0000000..796e8df --- /dev/null +++ b/0001-gmain-Partial-revert-of-recent-wakeup-changes-to-gma.patch @@ -0,0 +1,106 @@ +From 94b38beff1347ec4a733199f7a7abdacaa958678 Mon Sep 17 00:00:00 2001 +From: Philip Withnall +Date: Wed, 17 Jan 2018 11:38:50 +0000 +Subject: [PATCH] gmain: Partial revert of recent wakeup changes to gmain.c +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This reverts the following commits (but keeps the other recent changes +to gmain.c): + • e4ee3079c Do not wake up main loop if change is from same thread + • 208702404 main: Create a helper function for "owner wakeup" optimization + • 0c0469b56 gmain: Signal wakeups if context has never been acquired as well + • 9ba95e25b gmain: only signal GWakeup right before or during a blocking poll + +Some combination of them is causing problems with LibreOffice and/or +WebKit, and the safest thing to do at the moment is revert them all +until we work out what’s going on. The previous revert (4976e8109) was +not sufficient (it fixed WebKit, but re-broken LibreOffice). + +By reverting, we gain some spurious wakeups, but avoid dropping +necessary wakeups, which is presumably what’s causing problems in the +other modules. + +Signed-off-by: Philip Withnall + +https://bugzilla.gnome.org/show_bug.cgi?id=761102 +--- + glib/gmain.c | 33 +++++---------------------------- + 1 file changed, 5 insertions(+), 28 deletions(-) + +diff --git a/glib/gmain.c b/glib/gmain.c +index 8ca54de3a45b..67102cdf75d0 100644 +--- a/glib/gmain.c ++++ b/glib/gmain.c +@@ -1118,29 +1118,6 @@ source_remove_from_context (GSource *source, + } + } + +-/* See https://bugzilla.gnome.org/show_bug.cgi?id=761102 for +- * the introduction of this. +- * +- * The main optimization is to avoid waking up the main +- * context if a change is made by the current owner. +- */ +-static void +-conditional_wakeup (GMainContext *context) +-{ +- /* We want to signal wakeups in two cases: +- * 1 When the context is owned by another thread +- * 2 When the context owner is NULL (two subcases) +- * 2a Possible if the context has never been acquired +- * 2b Or if the context has no current owner +- * +- * At least case 2a) is necessary to ensure backwards compatibility with +- * qemu's use of GMainContext. +- * https://bugzilla.gnome.org/show_bug.cgi?id=761102#c14 +- */ +- if (context->owner != G_THREAD_SELF) +- g_wakeup_signal (context->wakeup); +-} +- + static guint + g_source_attach_unlocked (GSource *source, + GMainContext *context, +@@ -1187,8 +1164,8 @@ g_source_attach_unlocked (GSource *source, + /* If another thread has acquired the context, wake it up since it + * might be in poll() right now. + */ +- if (do_wakeup) +- conditional_wakeup (context); ++ if (do_wakeup && context->owner && context->owner != G_THREAD_SELF) ++ g_wakeup_signal (context->wakeup); + + return source->source_id; + } +@@ -1878,7 +1855,7 @@ g_source_set_ready_time (GSource *source, + { + /* Quite likely that we need to change the timeout on the poll */ + if (!SOURCE_BLOCKED (source)) +- conditional_wakeup (context); ++ g_wakeup_signal (context->wakeup); + UNLOCK_CONTEXT (context); + } + } +@@ -4318,7 +4295,7 @@ g_main_context_add_poll_unlocked (GMainContext *context, + context->poll_changed = TRUE; + + /* Now wake up the main loop if it is waiting in the poll() */ +- conditional_wakeup (context); ++ g_wakeup_signal (context->wakeup); + } + + /** +@@ -4378,7 +4355,7 @@ g_main_context_remove_poll_unlocked (GMainContext *context, + context->poll_changed = TRUE; + + /* Now wake up the main loop if it is waiting in the poll() */ +- conditional_wakeup (context); ++ g_wakeup_signal (context->wakeup); + } + + /** +-- +2.14.3 + diff --git a/glib2.spec b/glib2.spec index 75a8beb..fefc419 100644 --- a/glib2.spec +++ b/glib2.spec @@ -5,13 +5,17 @@ Name: glib2 Version: 2.55.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A library of handy utility functions License: LGPLv2+ URL: http://www.gtk.org Source0: http://download.gnome.org/sources/glib/2.55/glib-%{version}.tar.xz +# Backported from upstream +# https://bugzilla.gnome.org/show_bug.cgi?id=761102 +Patch0: 0001-gmain-Partial-revert-of-recent-wakeup-changes-to-gma.patch + BuildRequires: chrpath BuildRequires: gettext BuildRequires: perl-interpreter @@ -224,6 +228,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : %{_datadir}/installed-tests %changelog +* Thu Jan 18 2018 Kalev Lember - 2.55.1-2 +- gmain: Partial revert of recent wakeup changes + * Mon Jan 08 2018 Kalev Lember - 2.55.1-1 - Update to 2.55.1 - Drop upstreamed systemtap multilib fix