diff options
author | Peter Hartmann <phartmann@rim.com> | 2013-01-25 09:38:47 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-31 15:36:57 +0100 |
commit | 3dc47622a469ded1c99397fdedc2053b73d57189 (patch) | |
tree | 040d1481840c333d3cdc6da7c44e0e73f4c62c77 /src/plugins/bearer/blackberry | |
parent | a9458a175598a0da0fdfbfed7f9470878af25b72 (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/blackberry')
-rw-r--r-- | src/plugins/bearer/blackberry/qbbengine.cpp | 14 |
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; |