commsfwsupport/commselements/serverden/src/sd_workersession.cpp
branchRCL_3
changeset 15 51722b10598b
parent 1 21d2ab05f085
child 24 00c6709d25aa
equal deleted inserted replaced
14:4ccf8e394726 15:51722b10598b
   462 	__ASSERT_DEBUG((iSubSessions.ActiveCount() == 0 || PitBoss().TestImmediateShutdownPresent()), User::Panic(KSpecAssert_ElemSvrDenWrkrSC, 18));
   462 	__ASSERT_DEBUG((iSubSessions.ActiveCount() == 0 || PitBoss().TestImmediateShutdownPresent()), User::Panic(KSpecAssert_ElemSvrDenWrkrSC, 18));
   463 
   463 
   464 	iProcess.Close();
   464 	iProcess.Close();
   465 
   465 
   466 	const CCommonServer* s = static_cast<const CCommonServer*>(Server());
   466 	const CCommonServer* s = static_cast<const CCommonServer*>(Server());
   467 	__ASSERT_DEBUG(s->iNumSessions>0, User::Panic(KDenFaultPanic, ECommonNegativeSessionCount));
   467 	if (s)     // guard against leave during construction (e.g. a leave from CWorkerSession::ConstructL()).
   468 	s->iNumSessions--;
   468 	    {
   469 	COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("CWorkerSession(%08x):\t~CWorkerSession() iNumSessions=%d (remaining)"), this, s->iNumSessions));
   469         __ASSERT_DEBUG(s->iNumSessions>0, User::Panic(KDenFaultPanic, ECommonNegativeSessionCount));
   470 
   470         s->iNumSessions--;
   471 	CCommonWorkerThread& selfWorker = WorkerThread();
   471         COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("CWorkerSession(%08x):\t~CWorkerSession() iNumSessions=%d (remaining)"), this, s->iNumSessions));
   472 	if (selfWorker.ShuttingDown())
   472     
   473 		{
   473         CCommonWorkerThread& selfWorker = WorkerThread();
   474 		COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("Shutdown requested: %d sessions"), s->iNumSessions));
   474         if (selfWorker.ShuttingDown())
   475 		if (s->iNumSessions <= 0)
   475             {
   476 			{
   476             COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("Shutdown requested: %d sessions"), s->iNumSessions));
   477 			if(selfWorker.IsMainThread())
   477             if (s->iNumSessions <= 0)
   478 				{
   478                 {
   479 				selfWorker.PitBoss().SessionShutdownComplete();
   479                 if(selfWorker.IsMainThread())
   480 				}
   480                     {
   481 			else
   481                     selfWorker.PitBoss().SessionShutdownComplete();
   482 				{
   482                     }
   483 				selfWorker.MaybeTriggerThreadShutdownCallback();
   483                 else
   484 				}
   484                     {
   485 			}
   485                     selfWorker.MaybeTriggerThreadShutdownCallback();
   486 		}
   486                     }
       
   487                 }
       
   488             }
       
   489 	    }
   487 	}
   490 	}
   488 
   491 
   489 EXPORT_C void CWorkerSession::ProcessSubSessions(TWorkerId aPeerId, TSubSessionProcessor aSubSessionProcessor, TAny* aArg)
   492 EXPORT_C void CWorkerSession::ProcessSubSessions(TWorkerId aPeerId, TSubSessionProcessor aSubSessionProcessor, TAny* aArg)
   490 	{
   493 	{
   491 	TInt count = iSubSessions.ActiveCount();
   494 	TInt count = iSubSessions.ActiveCount();