diff -r b6139031a239 -r 928ed51ddc43 datacommsserver/esockserver/core_states/ss_corepractivities.cpp --- a/datacommsserver/esockserver/core_states/ss_corepractivities.cpp Fri Jan 22 10:58:59 2010 +0200 +++ b/datacommsserver/esockserver/core_states/ss_corepractivities.cpp Tue Jan 26 13:09:14 2010 +0200 @@ -1891,6 +1891,39 @@ EXPORT_C CStartActivity::~CStartActivity() { + CMMCommsProviderBase& node(static_cast(iNode)); + const TProviderInfoExt* providerInfoExt = static_cast(node.AccessPointConfig().FindExtension( + STypeId::CreateSTypeId(TProviderInfoExt::EUid, TProviderInfoExt::ETypeId))); + + __ASSERT_DEBUG(providerInfoExt, User::Panic(KSpecAssert_ESockCrStaCPRAC, 40)); + + if (Error() != KErrNone) + { + CNodeActivityBase* stopActivity = iNode.FindActivityById(ECFActivityStop); + + // If the Stop activity is running we skip sending the GoneDown message. This is because the Stop + // activity will send GoneDown too. + if (!stopActivity) + { + TCFControlClient::TGoneDown goneDown(Error(), providerInfoExt->iProviderInfo.APId()); + + TClientIter iter = iNode.GetClientIter( + TClientType(TCFClientType::ECtrl), TClientType(0, TCFClientType::ELeaving)); + RNodeInterface* ctrlClient = NULL; + + while ( (ctrlClient = iter++) ) + { + // Let control clients know the node has gone down, other than those that originated Start (they will be errored by ~CNodeActivityBase)... + if (FindOriginator(*ctrlClient) >= 0) + { + continue; // ControlClient is a Start originator + } + + TNodeCtxId ctxId(ActivityId(), iNode.Id()); + ctrlClient->PostMessage(ctxId, goneDown.CRef()); + } + } + } } EXPORT_C MeshMachine::CNodeActivityBase* CStartActivity::NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode)