forked from pool/libqt5-qtbase
- Add patch to fix infinite loop in KWin on XServer exit:
* 0001-Let-QXcbConnection-getTimestamp-properly-exit-when-X.patch - Spec file cleanup, remove conditionals for Leap 42.x OBS-URL: https://build.opensuse.org/package/show/KDE:Qt5/libqt5-qtbase?expand=0&rev=21
This commit is contained in:
parent
3b5d02df31
commit
a291362ba3
@ -0,0 +1,69 @@
|
|||||||
|
From 5519447b9db4023deca98e5b882845416a9c33f1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sheng Mao <shngmao@gmail.com>
|
||||||
|
Date: Fri, 13 Nov 2020 22:34:46 -0700
|
||||||
|
Subject: [PATCH] Let QXcbConnection::getTimestamp properly exit when X server
|
||||||
|
quits
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
QXcbConnection::getTimestamp uses dummy events to get timestamp from
|
||||||
|
X server. However, in some cases, X server shuts down while client tries
|
||||||
|
to get timestamp. In this case, QXcbConnection::getTimestamp keeps
|
||||||
|
getting null event and thus falls into indefinite loop.
|
||||||
|
|
||||||
|
This fix checks if xcb connection is still valid and use a special
|
||||||
|
xcb_timestamp_t value, CurrentTime (0L), as returned value.
|
||||||
|
CurrentTime should not be generated by X server and if getTimestamp
|
||||||
|
returns this value, it means an "exception" case is triggered.
|
||||||
|
|
||||||
|
This fix is introduced because in kwin_x11 (KDE project), X server can
|
||||||
|
exit on logout. kwin_x11 should handle disconnection from X server.
|
||||||
|
But the indefinite loop prevents kwin_x11 to process disconnection
|
||||||
|
event and therefore kwin_x11 cannot quit properly.
|
||||||
|
|
||||||
|
Fixes: QTBUG-88435
|
||||||
|
Change-Id: Iaf7ef3f8a35fa8389d22a608e3c49041bf90e1b9
|
||||||
|
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
||||||
|
Reviewed-by: Liang Qi <liang.qi@qt.io>
|
||||||
|
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
|
||||||
|
(cherry picked from commit dbd1c8b047700bb6d0adae848d6cbb89fa2fcfff)
|
||||||
|
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||||
|
---
|
||||||
|
src/plugins/platforms/xcb/qxcbconnection.cpp | 13 ++++++++++++-
|
||||||
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp
|
||||||
|
index c557109bd1..9abdae6a7c 100644
|
||||||
|
--- a/src/plugins/platforms/xcb/qxcbconnection.cpp
|
||||||
|
+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp
|
||||||
|
@@ -763,7 +763,10 @@ xcb_timestamp_t QXcbConnection::getTimestamp()
|
||||||
|
|
||||||
|
xcb_generic_event_t *event = nullptr;
|
||||||
|
|
||||||
|
- while (!event) {
|
||||||
|
+ // When disconnection is caused by X server, event will never be able to hold
|
||||||
|
+ // a valid pointer. isConnected(), which calls xcb_connection_has_error(),
|
||||||
|
+ // can handle this type of disconnection and properly quits the loop.
|
||||||
|
+ while (isConnected() && !event) {
|
||||||
|
connection()->sync();
|
||||||
|
event = eventQueue()->peek([window, dummyAtom](xcb_generic_event_t *event, int type) {
|
||||||
|
if (type != XCB_PROPERTY_NOTIFY)
|
||||||
|
@@ -773,6 +776,14 @@ xcb_timestamp_t QXcbConnection::getTimestamp()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (!event) {
|
||||||
|
+ // https://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.html#glossary
|
||||||
|
+ // > One timestamp value (named CurrentTime) is never generated by the
|
||||||
|
+ // > server. This value is reserved for use in requests to represent the
|
||||||
|
+ // > current server time.
|
||||||
|
+ return XCB_CURRENT_TIME;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
xcb_property_notify_event_t *pn = reinterpret_cast<xcb_property_notify_event_t *>(event);
|
||||||
|
xcb_timestamp_t timestamp = pn->time;
|
||||||
|
free(event);
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jan 19 07:46:43 UTC 2021 - Stefan Brüns <stefan.bruens@rwth-aachen.de>
|
||||||
|
|
||||||
|
- Add patch to fix infinite loop in KWin on XServer exit:
|
||||||
|
* 0001-Let-QXcbConnection-getTimestamp-properly-exit-when-X.patch
|
||||||
|
- Spec file cleanup, remove conditionals for Leap 42.x
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Dec 29 11:48:35 UTC 2020 - Arjen de Korte <suse+build@de-korte.org>
|
Tue Dec 29 11:48:35 UTC 2020 - Arjen de Korte <suse+build@de-korte.org>
|
||||||
|
|
||||||
|
@ -25,15 +25,8 @@
|
|||||||
%global gles 0
|
%global gles 0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?suse_version} >= 1330
|
|
||||||
%global vulkan 1
|
%global vulkan 1
|
||||||
%bcond_without harfbuzz
|
%bcond_without harfbuzz
|
||||||
%else
|
|
||||||
# Harfbuzz too old
|
|
||||||
%bcond_with harfbuzz
|
|
||||||
# Vulkan headers too old
|
|
||||||
%global vulkan 0
|
|
||||||
%endif
|
|
||||||
|
|
||||||
Name: libqt5-qtbase
|
Name: libqt5-qtbase
|
||||||
Version: 5.15.2
|
Version: 5.15.2
|
||||||
@ -72,6 +65,8 @@ Patch24: fix-fixqt4headers.patch
|
|||||||
# patches 1000-2000 and above from upstream 5.15 branch #
|
# patches 1000-2000 and above from upstream 5.15 branch #
|
||||||
# Merged: https://bugreports.qt.io/browse/QTBUG-87010
|
# Merged: https://bugreports.qt.io/browse/QTBUG-87010
|
||||||
Patch1000: 0001-Fix-allocated-memory-of-QByteArray.patch
|
Patch1000: 0001-Fix-allocated-memory-of-QByteArray.patch
|
||||||
|
# Merged: https://bugreports.qt.io/browse/QTBUG-88435
|
||||||
|
Patch1001: 0001-Let-QXcbConnection-getTimestamp-properly-exit-when-X.patch
|
||||||
# patches 2000-3000 and above from upstream qt6/dev branch #
|
# patches 2000-3000 and above from upstream qt6/dev branch #
|
||||||
# Not accepted yet, https://codereview.qt-project.org/c/qt/qtbase/+/255384
|
# Not accepted yet, https://codereview.qt-project.org/c/qt/qtbase/+/255384
|
||||||
Patch2001: 0002-Synthesize-Enter-LeaveEvent-for-accepted-QTabletEven.patch
|
Patch2001: 0002-Synthesize-Enter-LeaveEvent-for-accepted-QTabletEven.patch
|
||||||
|
Loading…
Reference in New Issue
Block a user