void CMonitor::removeBreakpoint(CStringDictionary::TStringId fbResId, CStringDictionary::TStringId fbNameId, CStringDictionary::TStringId portNameId){ T_DEVICE_MAP::iterator resIter; T_RESOURCE_CONTAINER::iterator fbIter; T_FB_CONTAINER_ITER portIter; CCriticalRegion criticalRegion(mLockDataWatches); // Test if Resource is in device, otherwise do nothing resIter = mDataWatches.find(fbResId); if(resIter != mDataWatches.end()){ // Test if FB is in Resource, otherwise do nothing fbIter = resIter->second.find(fbNameId); if(fbIter != resIter->second.end()){ // Test if Port is in FB, otherwise do nothing portIter = std::find(fbIter->second.breakpointList.begin(), fbIter->second.breakpointList.end(),portNameId); if(portIter != fbIter->second.breakpointList.end()){ fbIter->second.breakpointList.erase(portIter); } // clean up unused maps/lists if(fbIter->second.addWatchList.size() == 0 && fbIter->second.breakpointList.size() == 0){ resIter->second.erase(fbIter); } } // clean up unused maps/lists //if(resIter->second.size() == 0){ // mDataWatches.erase(resIter); //} } }
CModbusHandler::TCallbackDescriptor CModbusHandler::addComCallback(forte::com_infra::CComLayer* pa_pComCallback){ CCriticalRegion criticalRegion(m_oSync); m_nCallbackDescCount++; TComContainer stNewNode = { m_nCallbackDescCount, pa_pComCallback }; m_lstComCallbacks.push_back(stNewNode); return m_nCallbackDescCount; }
void CFDSelectHandler::addComCallback(TFileDescriptor pa_nFD, forte::com_infra::CComLayer *pa_poComLayer){ { CCriticalRegion criticalRegion(m_oSync); TConnContType stNewNode = { pa_nFD, pa_poComLayer }; m_lstConnectionsList.push_back(stNewNode); m_bConnectionListChanged = true; } if(!isAlive()){ #ifdef __XENO__ this->start(1,90); #else this->start(); #endif } resumeSelfSuspend(); }
void * c_posixThread::threadFunction(void *arguments){ // Get pointer to CThread object out of void pointer c_posixThread *pThread = (c_posixThread *) arguments; // if pointer is ok if(0 != pThread){ c_criticalRegion criticalRegion(pThread->joinMutex); pThread->isThisAlive = true; pThread->run(); pThread->isThisAlive = false; pThread->threadId = 0; } else{ FZRTE_ERROR("pThread pointer is 0!"); } return 0; }
void CModbusHandler::removeComCallback(CModbusHandler::TCallbackDescriptor pa_nCallbackDesc){ CCriticalRegion criticalRegion(m_oSync); TCallbackList::Iterator itRunner(m_lstComCallbacks.begin()); if(itRunner->m_nCallbackDesc == pa_nCallbackDesc){ m_lstComCallbacks.pop_front(); } else{ TCallbackList::Iterator itLastPos(itRunner); TCallbackList::Iterator itEnd(m_lstComCallbacks.end()); ++itRunner; while(itRunner != itEnd){ if(itRunner->m_nCallbackDesc == pa_nCallbackDesc){ m_lstComCallbacks.eraseAfter(itLastPos); break; } itLastPos = itRunner; ++itRunner; } } }
bool CMonitor::addBreakpoint(CDevice *device, CStringDictionary::TStringId resourceNameId, CStringDictionary::TStringId fbNameId, CStringDictionary::TStringId portNameId){ T_DEVICE_MAP::iterator resIter; T_RESOURCE_CONTAINER::iterator fbIter; T_FB_CONTAINER_ITER portIter; if(CMonitor::startBreakpoint(device, resourceNameId, fbNameId, portNameId) == false){ return false; } { CCriticalRegion criticalRegion(mLockDataWatches); // Test if Resource is in device, otherwise add it resIter = mDataWatches.find(resourceNameId); if(resIter == mDataWatches.end()){ T_RESOURCE_CONTAINER newResCont; mDataWatches[resourceNameId] = newResCont; resIter = mDataWatches.find(resourceNameId); } // Test if FB is in Resource, otherwise add it fbIter = resIter->second.find(fbNameId); if(fbIter == resIter->second.end()){ T_FB_CONTAINER newFbCont; resIter->second[fbNameId] = newFbCont; fbIter = resIter->second.find(fbNameId); } // Test if Port is in FB, otherwise add it portIter = std::find(fbIter->second.breakpointList.begin(), fbIter->second.breakpointList.end(),portNameId); if(portIter == fbIter->second.breakpointList.end()){ fbIter->second.breakpointList.push_back(portNameId); }else{} // port already inserted } //End Critical region return true; }
void CFDSelectHandler::removeComCallback(TFileDescriptor pa_nFD){ CCriticalRegion criticalRegion(m_oSync); TConnectionContainer::Iterator itRunner(m_lstConnectionsList.begin()); TConnectionContainer::Iterator itRefNode(m_lstConnectionsList.end()); TConnectionContainer::Iterator itEnd(m_lstConnectionsList.end()); while(itRunner != itEnd){ if(itRunner->m_nSockDes == pa_nFD){ if(itRefNode ==itEnd){ m_lstConnectionsList.pop_front(); } else{ m_lstConnectionsList.eraseAfter(itRefNode); } break; } itRefNode = itRunner; ++itRunner; } m_bConnectionListChanged = true; }
void c_posixThread::join(void){ if(0 != threadId){ c_criticalRegion criticalRegion(joinMutex); } }