summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRafael Roquetto <rafael.roquetto@kdab.com>2012-01-30 19:18:58 (GMT)
committerQt by Nokia <qt-info@nokia.com>2012-01-31 10:51:46 (GMT)
commit97b1aa8154d5cac485886982a48764bd847e53e1 (patch)
tree71ba4e3295aabcfb6512036686dab068995dbd1c /src
parent17edd41c1e3bcb4743b5c6cee5ecd9e1a1cf09b4 (diff)
downloadQt-97b1aa8154d5cac485886982a48764bd847e53e1.zip
Qt-97b1aa8154d5cac485886982a48764bd847e53e1.tar.gz
Qt-97b1aa8154d5cac485886982a48764bd847e53e1.tar.bz2
Fixed QEventDispatcherQPA::processEvents()
QEventDispatcherQPA::processEvents() calls QEventDispatcherUNIX::processEvents() twice in a row. Before the first call, it processes gui, posted events, input events and so on. It then calls QEventDispatcherUNIX::processEvents(), which will eventually drain the thread_pipe. If events are added by a second thread to the event queue, right after select() returns but before the thread_pipe is drained, once the program enters the second call to QEventDispatcherUNIX::processEvent(), select() will block, because the thread_pipe is empty, but the events will be stalled on the queue until something else causes select to return, because they are not handled between these two calls. Change-Id: Ie9a74573559feff6480b630abc237a8e5c89484b Reviewed-by: Robin Burchell <robin+qt@viroteck.net> Reviewed-by: Sean Harmer <sh@theharmers.co.uk> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qeventdispatcher_qpa.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp
index bdf6670..28aab6a 100644
--- a/src/gui/kernel/qeventdispatcher_qpa.cpp
+++ b/src/gui/kernel/qeventdispatcher_qpa.cpp
@@ -241,11 +241,10 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags)
}
if (!d->interrupt) {
- if (QEventDispatcherUNIX::processEvents(flags)) {
- QEventDispatcherUNIX::processEvents(flags);
+ if (QEventDispatcherUNIX::processEvents(flags))
return true;
- }
}
+
return (nevents > 0);
}