Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
void SafeManager::onExecutableDied(void* which)
{
    WAIT_SEMAPHOR();
    Executable* exe = static_cast<Executable*>(which);
    if(eventReceiver && exe)
        eventReceiver->onModStop(exe->getID());
    POST_SEMAPHOR();
}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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();
    }
    */
}