diff options
author | Rafael Roquetto <rafael.roquetto@kdab.com> | 2012-01-30 19:18:58 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-31 10:51:46 (GMT) |
commit | 97b1aa8154d5cac485886982a48764bd847e53e1 (patch) | |
tree | 71ba4e3295aabcfb6512036686dab068995dbd1c /src | |
parent | 17edd41c1e3bcb4743b5c6cee5ecd9e1a1cf09b4 (diff) | |
download | Qt-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.cpp | 5 |
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); } |