Ejemplo n.º 1
0
// Signal handler for handling shutdowns
static void signal_cb(int signum)
{
  if (instance == NULL || instance->isShutdown()) {
    return;
  }
  LoggerPtr logger = Logger::getLogger("capture-engine");
  // alarm means timeout has expired
  if (signum == SIGALRM) {
    logger->warning(CONTEXT, "Alarm expired, forcing shutdown");
    instance->forceShutdown();
  } else if (instance->isRunning()) {
    logger->info(CONTEXT, "Shutting down due to signal");
    instance->tryShutdown();
    // if we haven't shut down in 2 seconds, alarm and force it
    signal(SIGALRM, signal_cb);
    alarm(2);
  } else {
    logger->warning(CONTEXT, "Ignoring signal, already shutting down: %s",
                    instance->getStateName().c_str());
  }
}