diff options
Diffstat (limited to 'src/corelib/kernel/qeventdispatcher_blackberry.cpp')
-rw-r--r-- | src/corelib/kernel/qeventdispatcher_blackberry.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_blackberry.cpp b/src/corelib/kernel/qeventdispatcher_blackberry.cpp index 4cf1db18b4..d9e38b68b2 100644 --- a/src/corelib/kernel/qeventdispatcher_blackberry.cpp +++ b/src/corelib/kernel/qeventdispatcher_blackberry.cpp @@ -43,6 +43,7 @@ #include "qsocketnotifier.h" #include "qdebug.h" #include "qelapsedtimer.h" +#include "private/qthread_p.h" #include <bps/bps.h> #include <bps/event.h> @@ -352,11 +353,16 @@ int QEventDispatcherBlackberry::select(int nfds, fd_set *readfds, fd_set *writef } } - // Wait for event or file to be ready event = 0; - const int result = bps_get_event(&event, timeoutLeft); - if (Q_UNLIKELY(result != BPS_SUCCESS)) - qWarning("QEventDispatcherBlackberry bps_get_event failed"); + { // We need to increase loop level in this scope, + // because bps_get_event can also invoke callbacks + QScopedLoopLevelCounter loopLevelCounter(d->threadData); + + // Wait for event or file to be ready + const int result = bps_get_event(&event, timeoutLeft); + if (Q_UNLIKELY(result != BPS_SUCCESS)) + qWarning("QEventDispatcherBlackberry: bps_get_event failed"); + } if (!event) // In case of !event, we break out of the loop to let Qt process the timers break; // (since timeout has expired) and socket notifiers that are now ready. |