| From 94b38beff1347ec4a733199f7a7abdacaa958678 Mon Sep 17 00:00:00 2001 |
| From: Philip Withnall <withnall@endlessm.com> |
| Date: Wed, 17 Jan 2018 11:38:50 +0000 |
| Subject: 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 <withnall@endlessm.com> |
| |
| 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 8ca54de..67102cd 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); |
| } |
| |
| /** |
| -- |
| cgit v0.12 |
| |