Go to file
Igor Kushnir f2d22d5a51 xcb: fix thread synchronization in QXcbEventQueue::waitForNewEvents() again
This patch amends a41701904e

If peeking into the event queue looking for a clipboard event fails,
QXcbClipboard::waitForClipboardEvent() calls queue->peek for the second
time to "process other clipboard events, since someone is probably
requesting data from us". QXcbEventQueue::peek() in turn calls
QXcbEventQueue::flushBufferedEvents(). This second flushing can acquire
a waited-for clipboard event. The issue was that the code in
waitForNewEvents() ignored this possibility and assumed that there were
no clipboard events before or at its current m_flushedTail. If there
were no more events on the X11 connection after tailBeforeFlush,
the waitForNewEvents() in waitForClipboardEvent() blocked execution
for 5 seconds and eventually timed out.

The fix is to remember QXcbEventQueue::m_flushedTail just after looking
for and not finding a clipboard event in the queue. And then wait for
more events via QWaitCondition in waitForNewEvents() only if there were
no more events after the remembered m_flushedTail.

Fixes: QTBUG-75319
Pick-to: 5.15
Pick-to: 5.12
Change-Id: I4919c5b9b9227b3a8a29a11e7094f97960b3a121
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
2020-12-18 16:06:38 +01:00
.github/workflows GitHub Actions: Fix workflow file 2020-09-11 13:37:48 +02:00
bin CMake: Mark qt-cmake-standalone-test as an executable on Unix 2020-12-04 11:22:38 +01:00
cmake CMake: Add detection of FEATURE_foo change by user 2020-12-17 13:03:37 +01:00
coin Android: install android test scripts to libexec to test on all modules 2020-12-11 20:28:50 +00:00
config.tests CMake: Skip regeneration of manual compile test project 2020-04-09 11:26:46 +02:00
dist Add Qt 6.0.0 changes file 2020-11-16 10:02:08 +02:00
doc Fix typo in external-resources.qdoc 2020-12-07 15:43:42 +01:00
examples Improve the QtConcurrent ImageScaling example 2020-12-11 11:45:45 +01:00
lib Purge all fonts 2015-08-18 19:59:14 +00:00
mkspecs macOS: Don't hard-code x86_64 as the architecture when using qmake 2020-12-07 15:35:55 +01:00
qmake CMake: Regenerate projects using pro2cmake one last time 2020-12-10 11:52:30 +01:00
src xcb: fix thread synchronization in QXcbEventQueue::waitForNewEvents() again 2020-12-18 16:06:38 +01:00
tests Check size of QObjectPrivate::ExtraData in tst_toolsupport.cpp 2020-12-18 13:12:28 +01:00
util Android: restart emulator if it gets stuck during testing 2020-12-11 11:09:22 +02:00
.cmake.conf CMake: Enable NEW policies by CMake version with a global default 2020-12-07 13:22:57 +11:00
.gitattributes Give batch files CRLF line endings 2020-11-04 15:02:29 +00:00
.gitignore .gitignore: Qt Creator files cleanup 2020-09-25 07:50:15 +02:00
.lgtm.yml Skip LGTM analysis for the bootstrap library and tools 2020-07-16 01:04:34 +02:00
.prev_configure.cmake CMake: Fix conditions for some subarch features 2020-12-04 11:22:38 +01:00
.prev_qt_cmdline.cmake CMake: Regenerate configure.cmake files 2020-09-28 15:48:17 +02:00
.qmake.conf Bump version 2020-12-15 15:54:46 +01:00
.tag Update the git-archive export options 2012-09-07 15:39:31 +02:00
CMakeLists.txt CMake: Enable NEW policies by CMake version with a global default 2020-12-07 13:22:57 +11:00
config_help.txt Doc: Add -qt-host-path to configure's help screen 2020-12-07 15:26:11 +01:00
configure CMake: Disable building Qt with qmake 2020-12-10 15:25:37 +01:00
configure.bat CMake: Disable building Qt with qmake 2020-12-10 15:25:37 +01:00
configure.cmake CMake: Fix conditions for some subarch features 2020-12-04 11:22:38 +01:00
configure.json macOS: Don't hard-code x86_64 as the architecture when using qmake 2020-12-07 15:35:55 +01:00
configure.pri macOS: Don't hard-code x86_64 as the architecture when using qmake 2020-12-07 15:35:55 +01:00
dependencies.yaml Re-add dependencies.yaml so repos outside qt5 can be built with Coin 2019-09-19 17:07:36 +00:00
INSTALL INSTALL: Remove outdated reference to Windows CE 2019-02-13 13:01:57 +00:00
LICENSE.FDL
LICENSE.GPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.LGPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.LGPLv3 Remove LICENSE.GPLv3, LICENSE.LGPLv21, LGPL_EXCEPTION.txt 2018-04-16 11:02:14 +00:00
LICENSE.QT-LICENSE-AGREEMENT Update enterprise license agreement v4.2.1 2019-12-18 13:07:19 +02:00
qt_cmdline.cmake CMake: Add extra targets to run single benchmark using CMake generator 2020-12-07 14:26:07 +00:00
qtbase.pro QHeaderView: respect the font role while calculating the elided text 2020-12-08 15:15:58 +01:00
sync.profile Generate QUtf8StringView header file from qutf8stringview.h 2020-11-07 08:35:11 +00:00