loolwsd/LOOLBroker.cpp | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-)
New commits: commit 8a318c879a65cdb3285001126b8105b18c7febf5 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat Apr 2 17:58:18 2016 -0400 loolwsd: merged child command dispatching into a single class and renamed Change-Id: I894849ea7a6c69c084e922c76468c5e9eb621406 Reviewed-on: https://gerrit.libreoffice.org/23781 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp index 8c416d1..9df2ef5 100644 --- a/loolwsd/LOOLBroker.cpp +++ b/loolwsd/LOOLBroker.cpp @@ -160,14 +160,35 @@ namespace } } -class PipeRunnable +class ChildDispatcher { public: - PipeRunnable() : + ChildDispatcher() : + _wsdPipeReader("wsd_pipe_rd", readerBroker), _childPipeReader("child_pipe_rd", readerChild) { } + /// Polls WSD commands and dispatches them to the appropriate child. + bool pollAndDispatch() + { + return _wsdPipeReader.processOnce([this](std::string& message) { handleInput(message); return true; }, + []() { return TerminationFlag; }); + } + + /// Used for benchmarking child initialization. + bool waitForResponse() + { + std::string response; + if (_childPipeReader.readLine(response, [](){ return TerminationFlag; }) <= 0) + Log::error("Error reading response to benchmark message from child"); + else + Log::debug("got response '" + response + "'"); + return response == "started"; + } + +private: + bool createSession(const std::shared_ptr<ChildProcess>& child, const std::string& session, const std::string& url) { const std::string message = "session " + session + " " + url + "\n"; @@ -256,17 +277,8 @@ public: } } - bool waitForResponse() - { - std::string response; - if (_childPipeReader.readLine(response, [](){ return TerminationFlag; }) <= 0) - Log::error("Error reading response to benchmark message from child"); - else - Log::debug("got response '" + response + "'"); - return response == "started"; - } - private: + IoUtil::PipeReader _wsdPipeReader; IoUtil::PipeReader _childPipeReader; }; @@ -648,18 +660,16 @@ int main(int argc, char** argv) dropCapability(CAP_FOWNER); } - PipeRunnable pipeHandler; + ChildDispatcher childDispatcher; Log::info("loolbroker is ready."); Poco::Timestamp startTime; - IoUtil::PipeReader pipeReader(FIFO_LOOLWSD, readerBroker); while (!TerminationFlag) { - if (!pipeReader.processOnce([&pipeHandler](std::string& message) { pipeHandler.handleInput(message); return true; }, - []() { return TerminationFlag; })) + if (!childDispatcher.pollAndDispatch()) { - Log::info("Reading pipe [" + pipeReader.getName() + "] flagged for termination."); + Log::info("Child dispatcher flagged for termination."); break; } @@ -783,7 +793,7 @@ int main(int argc, char** argv) int numSpawned = 0; while (numSpawned < numPreSpawnedChildren) { - if (pipeHandler.waitForResponse()) + if (childDispatcher.waitForResponse()) numSpawned++; Log::info("got children " + std::to_string(numSpawned)); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits