summaryrefslogtreecommitdiffstats
path: root/src/plugins/bearer/symbian
diff options
context:
space:
mode:
authorShane Kearns <shane.kearns@accenture.com>2011-01-06 15:16:03 (GMT)
committerShane Kearns <shane.kearns@accenture.com>2011-01-06 15:26:50 (GMT)
commit66cfe2a776b7542fe1d8bae9c0d7bb5be79406fd (patch)
tree01c66deca46f8e8098973552d71a7661eda1dba9 /src/plugins/bearer/symbian
parent97e045f48a331ff97b87bd207fb811277a4fa695 (diff)
downloadQt-66cfe2a776b7542fe1d8bae9c0d7bb5be79406fd.zip
Qt-66cfe2a776b7542fe1d8bae9c0d7bb5be79406fd.tar.gz
Qt-66cfe2a776b7542fe1d8bae9c0d7bb5be79406fd.tar.bz2
Fix KERN-EXEC 0 panic on exit when bearer is searching for WLANs
The access point scanner cancels itself in the destructor. This requires the handle to be valid, but it was closed in the symbian engine destructor immediately before deleting the AP scanner. Because of the way symbian active objects work, the crashing function is only called if there was an asynchronous request in progress. So it could be missed in cases where the scan completes faster than the test case. Task-number: QTBUG-16484 Reviewed-by: Markus Goetz
Diffstat (limited to 'src/plugins/bearer/symbian')
-rw-r--r--src/plugins/bearer/symbian/symbianengine.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp
index f025d86..a370d78 100644
--- a/src/plugins/bearer/symbian/symbianengine.cpp
+++ b/src/plugins/bearer/symbian/symbianengine.cpp
@@ -144,6 +144,10 @@ SymbianEngine::~SymbianEngine()
{
Cancel();
+ //The scanner may be using the connection monitor so it needs to be
+ //deleted first while the handle is still valid.
+ delete ipAccessPointsAvailabilityScanner;
+
iConnectionMonitor.CancelNotifications();
iConnectionMonitor.Close();
@@ -151,8 +155,6 @@ SymbianEngine::~SymbianEngine()
iCmManager.Close();
#endif
- delete ipAccessPointsAvailabilityScanner;
-
// CCommsDatabase destructor uses cleanup stack. Since QNetworkConfigurationManager
// is a global static, but the time we are here, E32Main() has been exited already and
// the thread's default cleanup stack has been deleted. Without this line, a