Exemple #1
0
void
RPCTarget::RequestDone(FRT_RPCRequest *req)
{
    HandlerList handlers;
    {
        vespalib::MonitorGuard guard(_lock);
        assert(_state == TARGET_INVOKED);
        if (req->CheckReturnTypes("s")) {
            FRT_Values &val = *req->GetReturn();
            try {
                _version.reset(new vespalib::Version(val[0]._string._str));
            } catch (vespalib::IllegalArgumentException &e) {
                (void)e;
            }
        } else if (req->GetErrorCode() == FRTE_RPC_NO_SUCH_METHOD) {
            _version.reset(new vespalib::Version("4.1"));
        }
        _versionHandlers.swap(handlers);
        _state = PROCESSING_HANDLERS;
    }
    for (HandlerList::iterator it = handlers.begin();
         it != handlers.end(); ++it)
    {
        (*it)->handleVersion(_version.get());
    }
    {
        vespalib::MonitorGuard guard(_lock);
        _state = (_version.get() ? VERSION_RESOLVED : VERSION_NOT_RESOLVED);
        guard.broadcast();
    }
    req->SubRef();
}
Exemple #2
0
void EraseHandler(HandlerList& l,SignalHandler* h)
{
  list<SignalHandler*>::iterator i,p;
  for(i=l.begin();i!=l.end();i++) {
    if(*i==h) {
      p=i; p--;
      l.erase(i);
      i=p;
    }
  }
}
Exemple #3
0
void
SignalHandler::handle_signal(
  int			signal)
{
  typedef std::vector<const HandlerMap::value_type *> HandlerList;

  time_t now = ::time(NULL);

  std::cerr << "Sierra received signal " << signal << " at " << ::ctime(&now) << std::endl;

  HandlerList   handlers;

  std::pair<HandlerMap::const_iterator, HandlerMap::const_iterator> range = m_handlerMap.equal_range(signal);

  for (HandlerMap::const_iterator pos = range.first; pos != range.second; ++pos)
    handlers.push_back(&*pos);

  for (HandlerList::const_iterator it = handlers.begin(); it != handlers.end(); ++it) {
    CallbackBase &obj = *(*it)->second;
    obj();
  }
}