From 9ceac782c62e889852bfc1f72840d838ba98ebff Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Tue, 28 Jun 2011 13:08:45 +0100 Subject: Fix KERN-EXEC 0 errors in symbian bearer plugin The plugin was ignoring errors when opening a handle, and as a result crashed if the handle was invalid. Error checking / handle validity checks added. Task-number: QTBUG-18572 Reviewed-by: mread --- src/plugins/bearer/symbian/qnetworksession_impl.cpp | 9 ++++++++- src/plugins/bearer/symbian/symbianengine.cpp | 14 +++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index 791ebf2..5639c4f 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -476,6 +476,8 @@ TUint QNetworkSessionPrivateImpl::iapClientCount(TUint aIAPId) const { TRequestStatus status; TUint connectionCount; + if (!iConnectionMonitor.Handle()) + return 0; iConnectionMonitor.GetConnectionCount(connectionCount, status); User::WaitForRequest(status); if (status.Int() == KErrNone) { @@ -573,7 +575,8 @@ void QNetworkSessionPrivateImpl::stop() #endif if (!isOpen && publicConfig.isValid() && - publicConfig.type() == QNetworkConfiguration::InternetAccessPoint) { + publicConfig.type() == QNetworkConfiguration::InternetAccessPoint && + iConnectionMonitor.Handle()) { #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) << " - " << "since session is not open, using RConnectionMonitor to stop() the interface"; @@ -855,6 +858,8 @@ quint64 QNetworkSessionPrivateImpl::transferredData(TUint dataType) const return 0; } + if (!iConnectionMonitor.Handle()) + return 0; TUint count; TRequestStatus status; iConnectionMonitor.GetConnectionCount(count, status); @@ -1497,6 +1502,8 @@ bool QNetworkSessionPrivateImpl::easyWlanTrueIapId(TUint32 &trueIapId) const // Loop through all connections that connection monitor is aware // and check for IAPs based on easy WLAN + if (!iConnectionMonitor.Handle()) + return false; TRequestStatus status; TUint connectionCount; iConnectionMonitor.GetConnectionCount(connectionCount, status); diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 71687dd..04edbb7 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -104,11 +104,19 @@ void SymbianEngine::initialize() return; } - TRAP_IGNORE(iConnectionMonitor.ConnectL()); + TRAP(error, { + iConnectionMonitor.ConnectL(); + CleanupClosePushL(iConnectionMonitor); #ifdef SNAP_FUNCTIONALITY_AVAILABLE - TRAP_IGNORE(iConnectionMonitor.SetUintAttribute(EBearerIdAll, 0, KBearerGroupThreshold, 1)); + User::LeaveIfError(iConnectionMonitor.SetUintAttribute(EBearerIdAll, 0, KBearerGroupThreshold, 1)); #endif - TRAP_IGNORE(iConnectionMonitor.NotifyEventL(*this)); + iConnectionMonitor.NotifyEventL(*this); + CleanupStack::Pop(); + }); + if (error != KErrNone) { + iInitOk = false; + return; + } #ifdef SNAP_FUNCTIONALITY_AVAILABLE TRAP(error, iCmManager.OpenL()); -- cgit v0.12