void RobotManager::BreakChannel(xhn::static_string sender, xhn::static_string receiver) { xhn::RWLock2::Instance inst = m_readwriteLock.GetWriteLock(); RobotMap::iterator r = m_robotMap.find(receiver); if (r != m_robotMap.end()) { Robot* rRob = r->second; rRob->m_commandReceivingChannels.erase(sender); } RobotMap::iterator s = m_robotMap.find(sender); if (s != m_robotMap.end()) { Robot* sRob = r->second; Robot::ChannelMap::iterator iter = sRob->m_commandTransmissionChannels.find(receiver); if (iter != sRob->m_commandTransmissionChannels.end()) { RobotCommand* cmd[2]; euint size = 0; RWBuffer channel = iter->second; while (RWBuffer_Read(channel, (euint*)cmd, &size)) { if (size >= sizeof(RobotCommand*)) delete cmd[0]; } RWBuffer_delete(iter->second); } } }
SafedBuffer::~SafedBuffer() { Mfree(m_transferBuffer); RWBuffer_delete(m_buffer); }