void CMultiXProcess::CancelMsg(CMultiXAppMsgID &ID,bool bTimedout) { CMultiXAppMsg *Msg = ID.GetObject(); if(Msg) { if(Msg->MultiXMsg()->m_SendSem.Initialized()) Msg->MultiXMsg()->m_SendSem.Lock(); ID.RemoveObject(); Msg->m_bKeep = false; CMultiXSession *Session = Owner()->FindSession(Msg->SessionID()); if(bTimedout) { if(Session) { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmTimedout(*Msg); else Session->OnSendMsgTimedoutNV(*Msg); } else { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmTimedout(*Msg); else OnSendMsgTimedout(*Msg); } } else { if(Session) { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmFailed(*Msg); else Session->OnSendMsgFailedNV(*Msg); } else { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmFailed(*Msg); else OnSendMsgFailed(*Msg); } } if(!Msg->m_bKeep) delete Msg; } }