void ProxygenServer::forceStop() { Logger::Info("%p: forceStop ProxygenServer port=%d, enqueued=%d, conns=%d", this, m_port, m_enqueuedCount, getLibEventConnectionCount()); m_httpServerSocket.reset(); m_httpsServerSocket.reset(); // Drops all open connections if (m_httpAcceptor && m_httpAcceptor->getState() < Acceptor::State::kDone) { m_httpAcceptor->forceStop(); } if (m_httpsAcceptor && m_httpAcceptor->getState() < Acceptor::State::kDone) { m_httpsAcceptor->forceStop(); } // No more responses coming from worker threads stopConsuming(); Logger::Verbose("%p: Stopped response queue consumer port=%d", this, m_port); // The worker should exit gracefully m_worker.stopWhenIdle(); Logger::Verbose("%p: i/o thread notified to stop port=%d", this, m_port); // Aaaand we're done - oops not thread safe. Does it matter? setStatus(RunStatus::STOPPED); HttpServer::MarkShutdownStat(ShutdownEvent::SHUTDOWN_DONE); for (auto listener: m_listeners) { listener->serverStopped(this); } }
FileRegion::FileWriteRequest::~FileWriteRequest() { CHECK(readBase_->isInEventBaseThread()); socket_->getEventBase()->runInEventBaseThreadAndWait([&]{ stopConsuming(); if (pipe_out_ > -1) { ::close(pipe_out_); } }); }
void stop() { stopProducing(); stopConsuming(); }