--- a/commsfwsupport/commselements/serverden/src/sd_workersession.cpp Wed Apr 14 17:14:05 2010 +0300
+++ b/commsfwsupport/commselements/serverden/src/sd_workersession.cpp Tue Apr 27 17:53:34 2010 +0300
@@ -464,26 +464,29 @@
iProcess.Close();
const CCommonServer* s = static_cast<const CCommonServer*>(Server());
- __ASSERT_DEBUG(s->iNumSessions>0, User::Panic(KDenFaultPanic, ECommonNegativeSessionCount));
- s->iNumSessions--;
- COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("CWorkerSession(%08x):\t~CWorkerSession() iNumSessions=%d (remaining)"), this, s->iNumSessions));
-
- CCommonWorkerThread& selfWorker = WorkerThread();
- if (selfWorker.ShuttingDown())
- {
- COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("Shutdown requested: %d sessions"), s->iNumSessions));
- if (s->iNumSessions <= 0)
- {
- if(selfWorker.IsMainThread())
- {
- selfWorker.PitBoss().SessionShutdownComplete();
- }
- else
- {
- selfWorker.MaybeTriggerThreadShutdownCallback();
- }
- }
- }
+ if (s) // guard against leave during construction (e.g. a leave from CWorkerSession::ConstructL()).
+ {
+ __ASSERT_DEBUG(s->iNumSessions>0, User::Panic(KDenFaultPanic, ECommonNegativeSessionCount));
+ s->iNumSessions--;
+ COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("CWorkerSession(%08x):\t~CWorkerSession() iNumSessions=%d (remaining)"), this, s->iNumSessions));
+
+ CCommonWorkerThread& selfWorker = WorkerThread();
+ if (selfWorker.ShuttingDown())
+ {
+ COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("Shutdown requested: %d sessions"), s->iNumSessions));
+ if (s->iNumSessions <= 0)
+ {
+ if(selfWorker.IsMainThread())
+ {
+ selfWorker.PitBoss().SessionShutdownComplete();
+ }
+ else
+ {
+ selfWorker.MaybeTriggerThreadShutdownCallback();
+ }
+ }
+ }
+ }
}
EXPORT_C void CWorkerSession::ProcessSubSessions(TWorkerId aPeerId, TSubSessionProcessor aSubSessionProcessor, TAny* aArg)