void SafeManager::onExecutableStdout(void* which, const char* msg) { WAIT_SEMAPHOR(); Executable* exe = static_cast<Executable*>(which); if(eventReceiver) eventReceiver->onModStdout(exe->getID(), msg); POST_SEMAPHOR(); }
void SafeManager::onExecutableDied(void* which) { WAIT_SEMAPHOR(); Executable* exe = static_cast<Executable*>(which); if(eventReceiver && exe) eventReceiver->onModStop(exe->getID()); POST_SEMAPHOR(); }
void SafeManager::onExecutableFailed(void* which) { WAIT_SEMAPHOR(); ErrorLogger* logger = ErrorLogger::Instance(); Executable* exe = static_cast<Executable*>(which); if(exe) { if(m_pConfig->find("module_failure").asString() == "prompt") { OSTRINGSTREAM err; err<<exe->getCommand()<<" from "<<exe->getHost()<<" is failed! [id:"<<exe->getID()<<"]"; logger->addError(err); if(eventReceiver && exe) eventReceiver->onModStop(exe->getID()); } if(m_pConfig->find("module_failure").asString() == "recover") { OSTRINGSTREAM err; err<<exe->getCommand()<<" from "<<exe->getHost()<<" is failed! [id:"<<exe->getID()<<"] (restarting...)"; logger->addError(err); exe->start(); } if(m_pConfig->find("module_failure").asString() == "terminate") { OSTRINGSTREAM err; err<<exe->getCommand()<<" from "<<exe->getHost()<<" is failed! [id:"<<exe->getID()<<"] (terminating...)"; logger->addError(err); Manager::stop(); } } if(eventReceiver) eventReceiver->onError(); POST_SEMAPHOR(); }
void SafeManager::onExecutableStop(void* which) { WAIT_SEMAPHOR(); Executable* exe = static_cast<Executable*>(which); if(eventReceiver && exe) eventReceiver->onModStop(exe->getID()); POST_SEMAPHOR(); // Experimental: // do auto refresh on connections whenever a module stops /* if(checkSemaphore()) { if(!isRunning()) { conIds.clear(); for(int i=0; i<getConnections().size(); i++) conIds.push_back(i); action = MREFRESH_CNN; yarp::os::Thread::start(); } POST_SEMAPHOR(); } */ }