-
Bug
-
Resolution: Done
-
P1: Critical
-
4.7.2
-
None
-
S60 5.0 (Nokia 5800 4.0.001RND)
-
66cfe2a776b7542fe1d8bae9c0d7bb5be79406fd
When the bearer engine is used, the application crashes inside QCoreApplication destructor.
This can be reproduced 100% with the tst_qnetworkaccessmanager autotest (the test records a pass in the log and then crashes)
Root cause is that objects inside the bearer plugin are destroyed in the wrong order.
First a connection is closed, and then an asynchronous request on that connection is cancelled resulting in KERN-EXEC 0 (bad handle) panic.
This appears to be because the plugin is using QObject parent-child relationship to handle cleanup.
The parent object owns the session, but the child owns the asynchronous request.
Probably this can be solved by explicitly cancelling all children in the parent's destructor before closing the session.
Stack trace:
00416dcc 790cf73d =..y 000d symbianengine.o(.text) AccessPointsAvailabilityScanner::DoCancel()
00416ddc 790cf65d ]..y 000f symbianengine.o(.text) AccessPointsAvailabilityScanner::~AccessPointsAvailabilityScanner()
00416de4 790cf675 u..y 000f symbianengine.o(.text) AccessPointsAvailabilityScanner::~AccessPointsAvailabilityScanner__deallocating()
00416df4 790cc8a7 ...y 0045 symbianengine.o(.text) SymbianEngine::~SymbianEngine()
00416e04 790cc8f9 ...y 000f symbianengine.o(.text) SymbianEngine::~SymbianEngine__deallocating()
00416e14 79596fc9 .oYy 001f qnetworkconfigmanager_p.o(t.Z10qDeleteAllIN5QListIP13QBearerEngineE14const_iteratorEEvT_S5) qDeleteAll<QList<QBearerEngine*>::const_iterator>(T1, T1)
00416e24 795647b7 .GVy 003f qnetworkconfigmanager_p.o(.text) QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate()
00416e44 79564815 .HVy 000f qnetworkconfigmanager_p.o(.text) QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate__deallocating()
00416e5c 79416dfd .mAy 00a3 qcoreapplication.o(.text) qt_call_post_routines()
00416e7c 79417b41 A{Ay 000d qcoreapplication.o(.text) QCoreApplication::~QCoreApplication()
00416e90 7952beac ..Ry 0008 qobject.o(.constdata__ZTV7QObject) vtable for QObject
00416e98 7952ac38 8.Ry 0008 moc_qcoreapplication.o(.constdata__ZTV16QCoreApplication) vtable for QCoreApplication
00416f4c 793deb00 ..=y 009c heap_hybrid.o(.text) UserHeap::CreateThreadHeap(SStdEpocThreadCreateInfo&, RHeap*&, int, int)
00416f74 793e4008 .@>y qt_heapsetup_symbian.o(.text) qt_symbian_SetupThreadHeap(int, SStdEpocThreadCreateInfo&)