diff -r b6139031a239 -r 928ed51ddc43 datacommsserver/esockserver/core_states/ss_coreprstates.cpp --- a/datacommsserver/esockserver/core_states/ss_coreprstates.cpp Fri Jan 22 10:58:59 2010 +0200 +++ b/datacommsserver/esockserver/core_states/ss_coreprstates.cpp Tue Jan 26 13:09:14 2010 +0200 @@ -1204,9 +1204,10 @@ TClientIter iter = iContext.Node().GetClientIter(TClientType(TCFClientType::ECtrl)); for (TInt i = 0; iter[i]; i++) { - //Send TGoneUp to every Ctrl client except the originator (who would be recieving TStarted) - if ((iContext.iNodeActivity && iContext.iNodeActivity->FindOriginator(*iter[i]) != KErrNone) - && iter[i] != iContext.iPeer) + // Send TGoneUp to every Ctrl client except the originator (who would be recieving TStarted) + // (activity might be the GoneUp Activity rather than the Start Activity, but then the originator + // would be a ServiceProvider, and so the ControlClient will not be found) + if (iContext.iNodeActivity && iContext.iNodeActivity->FindOriginator(*iter[i]) == KErrNotFound) { iter[i]->PostMessage(TNodeCtxId(iContext.ActivityId(), iContext.NodeId()), TCFControlClient::TGoneUp()); } @@ -1291,17 +1292,22 @@ TCFControlClient::TGoneDown goneDown(stopCode, providerInfo.APId()); TClientIter iter = iContext.Node().GetClientIter(TClientType(TCFClientType::ECtrl)); - for (TInt i = 0; iter[i]; i++) + CNodeActivityBase* startActivity = iContext.Node().FindActivityById(ECFActivityStart); + + for (TInt i = 0; iter[i]; i++) { - CNodeActivityBase* startActivity = iContext.Node().FindActivityById(ECFActivityStart); - //Send TGoneDown to every Ctrl client except // * the originator (who would be recieving TStopped) // * originators of the start activity (these will be errored separately) - if (((iContext.iNodeActivity && iContext.iNodeActivity->FindOriginator(*iter[i]) != KErrNone) || - (iContext.iNodeActivity == NULL && iter[i] != iContext.iPeer)) - && (startActivity == NULL || startActivity->FindOriginator(*iter[i]) != KErrNone)) + if (iContext.iNodeActivity && iContext.iNodeActivity->FindOriginator(*iter[i]) >= 0) + { + continue; // ControlClient is a Stop originator + } + + // So far the control client is not a Stop originator + if (startActivity == NULL || startActivity->FindOriginator(*iter[i]) == KErrNotFound) { + // ControlClient is not a Start originator iter[i]->PostMessage(TNodeCtxId(iContext.ActivityId(), iContext.NodeId()), goneDown); } }