diff --git a/hphp/runtime/base/server/http_server.cpp b/hphp/runtime/base/server/http_server.cpp index 3757474ad..e6b129dcd 100644 --- a/hphp/runtime/base/server/http_server.cpp +++ b/hphp/runtime/base/server/http_server.cpp @@ -99,10 +99,10 @@ HttpServer::HttpServer(void *sslCTX /* = NULL */) RuntimeOption::RequestTimeoutSeconds); maybeEnableThrottle(server.get()); server->setTransferFilename(RuntimeOption::TakeoverFilename); - server->addTakeoverListener(this); m_pageServer = server; } m_pageServer->setRequestHandlerFactory(); + m_pageServer->addTakeoverListener(this); if (RuntimeOption::EnableSSL && m_sslCTX) { assert(SSLInit::IsInited()); @@ -215,7 +215,7 @@ void HttpServer::onServerShutdown() { } } -void HttpServer::takeoverShutdown(LibEventServerWithTakeover* server) { +void HttpServer::takeoverShutdown(HPHP::Server* server) { assert(server == m_pageServer.get()); // We want to synchronously shut down our satellite servers to free up ports, // then asynchronously shut down everything else. diff --git a/hphp/runtime/base/server/http_server.h b/hphp/runtime/base/server/http_server.h index 5baf1e852..10e424c96 100644 --- a/hphp/runtime/base/server/http_server.h +++ b/hphp/runtime/base/server/http_server.h @@ -34,7 +34,7 @@ public: static time_t StartTime; public: - HttpServer(void *sslCTX = nullptr); + explicit HttpServer(void *sslCTX = nullptr); ~HttpServer(); void run(); @@ -47,7 +47,7 @@ public: void flushLog(); void watchDog(); - void takeoverShutdown(LibEventServerWithTakeover* server); + void takeoverShutdown(HPHP::Server* server); ServerPtr getPageServer() { return m_pageServer;} diff --git a/hphp/runtime/base/server/libevent_server_with_takeover.h b/hphp/runtime/base/server/libevent_server_with_takeover.h index 0ca2a1682..f5c22de4b 100644 --- a/hphp/runtime/base/server/libevent_server_with_takeover.h +++ b/hphp/runtime/base/server/libevent_server_with_takeover.h @@ -22,8 +22,6 @@ namespace HPHP { /////////////////////////////////////////////////////////////////////////////// -class TakeoverListener; - /** * LibEventServer that adds the ability to take over an accept socket * from another process, and give its accept socket up. @@ -42,10 +40,10 @@ public: m_transfer_fname = fname; } - void addTakeoverListener(TakeoverListener* lisener) { + virtual void addTakeoverListener(TakeoverListener* lisener) { m_takeover_listeners.insert(lisener); } - void removeTakeoverListener(TakeoverListener* lisener) { + virtual void removeTakeoverListener(TakeoverListener* lisener) { m_takeover_listeners.erase(lisener); } @@ -67,12 +65,6 @@ protected: bool m_took_over; }; -class TakeoverListener { -public: - virtual ~TakeoverListener(); - virtual void takeoverShutdown(LibEventServerWithTakeover* server) = 0; -}; - /////////////////////////////////////////////////////////////////////////////// } diff --git a/hphp/runtime/base/server/server.h b/hphp/runtime/base/server/server.h index 5c8bdb38c..e338bf650 100644 --- a/hphp/runtime/base/server/server.h +++ b/hphp/runtime/base/server/server.h @@ -85,6 +85,16 @@ public: virtual void handleRequest(Transport *transport) = 0; }; +/** + * A callback to be informed when a server is shutting down because its socket + * has been taken over by a new process. + */ +class TakeoverListener { +public: + virtual ~TakeoverListener(); + virtual void takeoverShutdown(Server* server) = 0; +}; + typedef std::function()> RequestHandlerFactory; typedef std::function URLChecker; @@ -146,6 +156,14 @@ public: m_urlChecker = checker; } + /** + * Add or remove a TakeoverListener to this server. + * + * This is a no-op for servers that do not support socket takeover. + */ + virtual void addTakeoverListener(TakeoverListener* lisener) {} + virtual void removeTakeoverListener(TakeoverListener* lisener) {} + /** * Informational. */