Update to 2.53.2
This commit is contained in:
parent
15854645a4
commit
c120a31c5c
@ -1,106 +0,0 @@
|
|||||||
From 5d74233476d61771b4d67d50bec5420f551ef922 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
|
||||||
Date: Tue, 4 Apr 2017 09:56:47 +0200
|
|
||||||
Subject: [PATCH] gmain: only signal GWakeup right before or during a blocking
|
|
||||||
poll
|
|
||||||
|
|
||||||
Since commit e4ee307 ("Do not wake up main loop if change is from same
|
|
||||||
thread", bug 761102), GMainContext uses context->owner to decide if the
|
|
||||||
event loop is being run in the current thread. However, what really
|
|
||||||
matters is the phase in the prepare/query/poll/check/dispatch sequence.
|
|
||||||
Wakeups are only needed between the end of prepare and the end of poll,
|
|
||||||
and then only if prepare found that no sources were ready.
|
|
||||||
|
|
||||||
There is no need to take threads into account, because prepare, check
|
|
||||||
and all callers of conditional_wakeup all look at the new need_wakeup
|
|
||||||
flag inside LOCK_CONTEXT/UNLOCK_CONTEXT.
|
|
||||||
|
|
||||||
With this change, g_main_context_is_owner and g_main_context_wait are
|
|
||||||
the only functions for which acquire/release matters, just like before
|
|
||||||
commit e4ee307.
|
|
||||||
|
|
||||||
Signed-off-by: Paolo Bonzini <bonzini@gnu.org>
|
|
||||||
---
|
|
||||||
glib/gmain.c | 30 +++++++++++++++++++-----------
|
|
||||||
1 file changed, 19 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gmain.c b/glib/gmain.c
|
|
||||||
index ab2908e52..af0a29ae5 100644
|
|
||||||
--- a/glib/gmain.c
|
|
||||||
+++ b/glib/gmain.c
|
|
||||||
@@ -277,7 +277,8 @@ struct _GMainContext
|
|
||||||
|
|
||||||
guint next_id;
|
|
||||||
GList *source_lists;
|
|
||||||
- gint in_check_or_prepare;
|
|
||||||
+ gboolean in_check_or_prepare;
|
|
||||||
+ gboolean need_wakeup;
|
|
||||||
|
|
||||||
GPollRec *poll_records;
|
|
||||||
guint n_poll_records;
|
|
||||||
@@ -651,6 +652,7 @@ g_main_context_new (void)
|
|
||||||
|
|
||||||
context->pending_dispatches = g_ptr_array_new ();
|
|
||||||
|
|
||||||
+ context->need_wakeup = FALSE;
|
|
||||||
context->time_is_fresh = FALSE;
|
|
||||||
|
|
||||||
context->wakeup = g_wakeup_new ();
|
|
||||||
@@ -1127,17 +1129,11 @@ source_remove_from_context (GSource *source,
|
|
||||||
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
|
|
||||||
+ /* This flag is set if at the start of prepare() we have no other ready
|
|
||||||
+ * sources, and hence would wait in poll(). In that case, any other threads
|
|
||||||
+ * attaching sources will need to signal a wakeup.
|
|
||||||
*/
|
|
||||||
- if (context->owner != G_THREAD_SELF)
|
|
||||||
+ if (context->need_wakeup)
|
|
||||||
g_wakeup_signal (context->wakeup);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -3469,6 +3465,10 @@ g_main_context_prepare (GMainContext *context,
|
|
||||||
|
|
||||||
LOCK_CONTEXT (context);
|
|
||||||
|
|
||||||
+ /* context->need_wakeup is protected by LOCK_CONTEXT/UNLOCK_CONTEXT,
|
|
||||||
+ * so need not set it yet.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
context->time_is_fresh = FALSE;
|
|
||||||
|
|
||||||
if (context->in_check_or_prepare)
|
|
||||||
@@ -3594,6 +3594,8 @@ g_main_context_prepare (GMainContext *context,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
g_source_iter_clear (&iter);
|
|
||||||
+ /* See conditional_wakeup() where this is used */
|
|
||||||
+ context->need_wakeup = (n_ready == 0);
|
|
||||||
|
|
||||||
TRACE (GLIB_MAIN_CONTEXT_AFTER_PREPARE (context, current_priority, n_ready));
|
|
||||||
|
|
||||||
@@ -3728,6 +3730,12 @@ g_main_context_check (GMainContext *context,
|
|
||||||
|
|
||||||
TRACE (GLIB_MAIN_CONTEXT_BEFORE_CHECK (context, max_priority, fds, n_fds));
|
|
||||||
|
|
||||||
+ /* We don't need to wakeup during check or dispatch, because
|
|
||||||
+ * all sources will be re-evaluated during prepare/query.
|
|
||||||
+ */
|
|
||||||
+ context->need_wakeup = FALSE;
|
|
||||||
+
|
|
||||||
+ /* And if we have a wakeup pending, acknowledge it */
|
|
||||||
for (i = 0; i < n_fds; i++)
|
|
||||||
{
|
|
||||||
if (fds[i].fd == context->wake_up_rec.fd)
|
|
||||||
--
|
|
||||||
2.12.2
|
|
||||||
|
|
12
glib2.spec
12
glib2.spec
@ -4,15 +4,13 @@
|
|||||||
%global __python %{__python3}
|
%global __python %{__python3}
|
||||||
|
|
||||||
Name: glib2
|
Name: glib2
|
||||||
Version: 2.52.2
|
Version: 2.53.2
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: A library of handy utility functions
|
Summary: A library of handy utility functions
|
||||||
|
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: http://www.gtk.org
|
URL: http://www.gtk.org
|
||||||
Source0: http://download.gnome.org/sources/glib/2.52/glib-%{version}.tar.xz
|
Source0: http://download.gnome.org/sources/glib/2.53/glib-%{version}.tar.xz
|
||||||
|
|
||||||
Patch0: 0001-gmain-only-signal-GWakeup-right-before-or-during-a-b.patch
|
|
||||||
|
|
||||||
BuildRequires: chrpath
|
BuildRequires: chrpath
|
||||||
BuildRequires: gettext
|
BuildRequires: gettext
|
||||||
@ -83,7 +81,6 @@ the functionality of the installed glib2 package.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n glib-%{version}
|
%setup -q -n glib-%{version}
|
||||||
%patch0 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# Bug 1324770: Also explicitly remove PCRE sources since we use --with-pcre=system
|
# Bug 1324770: Also explicitly remove PCRE sources since we use --with-pcre=system
|
||||||
@ -232,6 +229,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
|
|||||||
%{_datadir}/installed-tests
|
%{_datadir}/installed-tests
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed May 24 2017 Florian Müllner <fmuellner@redhat.com> - 2.53.2-1
|
||||||
|
- Update to 2.53.2
|
||||||
|
|
||||||
* Mon May 15 2017 Kalev Lember <klember@redhat.com> - 2.52.2-2
|
* Mon May 15 2017 Kalev Lember <klember@redhat.com> - 2.52.2-2
|
||||||
- Backport a gmain GWakeup patch to fix timedatex high CPU usage (#1450628)
|
- Backport a gmain GWakeup patch to fix timedatex high CPU usage (#1450628)
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (glib-2.52.2.tar.xz) = 3ea49b75b6f80d9974ebd3c40518d5aaffffd9d9d008c1ae3302690fa34899b91ae59c87f8235077129bbd8b01ef19211efb89bc7fdb08d0254b07735b1ba92d
|
SHA512 (glib-2.53.2.tar.xz) = b686252c245dd431d956180b9212297b2cb359fd4edf42442b859dd7ec12d7fedd532da8ee7fdf0dd789086bb9fd266eaa05b08fbd85deb897a1e1fcd4cf0549
|
||||||
|
Loading…
Reference in New Issue
Block a user