summaryrefslogtreecommitdiffstats
path: root/src/plugins/bearer
diff options
context:
space:
mode:
authorPeter Hartmann <phartmann@rim.com>2013-01-25 09:38:47 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-31 15:36:57 +0100
commit3dc47622a469ded1c99397fdedc2053b73d57189 (patch)
tree040d1481840c333d3cdc6da7c44e0e73f4c62c77 /src/plugins/bearer
parenta9458a175598a0da0fdfbfed7f9470878af25b72 (diff)
BlackBerry bearer plugin: check whether device is online several times
This is supposed to workaround a race condition in the underlying netstatus API: Sometimes we get an event that the Wifi interface changed, but it is not up, e.g. no gateway (yet). In that case we need to check back (currently: 300 ms) whether the interface has come up or not. This commit can be reverted again once the race condition in the netstatus API has been resolved. Task-number: QTBUG-29421 Change-Id: I215ce8aae4848b6e942e77c6425adba90e9cc526 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Diffstat (limited to 'src/plugins/bearer')
-rw-r--r--src/plugins/bearer/blackberry/qbbengine.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/plugins/bearer/blackberry/qbbengine.cpp b/src/plugins/bearer/blackberry/qbbengine.cpp
index d64a8fe20f..ab1ba9aa19 100644
--- a/src/plugins/bearer/blackberry/qbbengine.cpp
+++ b/src/plugins/bearer/blackberry/qbbengine.cpp
@@ -45,6 +45,7 @@
#include <QDebug>
#include <QThreadStorage>
#include <QStringList>
+#include <QTimer>
#include <bps/netstatus.h>
@@ -355,6 +356,9 @@ void QBBEngine::updateConfiguration(const char *interface)
changed = true;
}
+ const netstatus_ip_status_t oldIpStatus = ptr->oldIpStatus;
+ ptr->oldIpStatus = ipStatus;
+
ptrLocker.unlock();
locker.unlock();
@@ -364,7 +368,17 @@ void QBBEngine::updateConfiguration(const char *interface)
Q_EMIT configurationChanged(ptr);
} else {
+ // maybe Wifi has changed but gateway not yet ready etc.
qBearerDebug() << Q_FUNC_INFO << "configuration has not changed.";
+ if (oldIpStatus != ipStatus) { // if IP status changed
+ if (ipStatus != NETSTATUS_IP_STATUS_OK
+ && ipStatus != NETSTATUS_IP_STATUS_ERROR_NOT_UP
+ && ipStatus != NETSTATUS_IP_STATUS_ERROR_NOT_CONFIGURED) {
+ // work around race condition in netstatus API by just checking
+ // again in 300 ms
+ QTimer::singleShot(300, this, SLOT(doRequestUpdate()));
+ }
+ }
}
return;