[Libreoffice-commits] online.git: loolwsd/IoUtil.cpp loolwsd/IoUtil.hpp loolwsd/LOOLForKit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Sun Apr 17 16:12:48 UTC 2016
loolwsd/IoUtil.cpp | 24 ------------------------
loolwsd/IoUtil.hpp | 8 +-------
loolwsd/LOOLForKit.cpp | 33 ++++++++++++++++++++++++---------
3 files changed, 25 insertions(+), 40 deletions(-)
New commits:
commit 882ffafb16e01ac8bfd8cfefd8c5fc03e98d6f90
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun Apr 17 12:05:56 2016 -0400
loolwsd: simplified ChildDispatcher
Change-Id: I5b61678a01f4491ca06a25dd969f7538b4c8445d
Reviewed-on: https://gerrit.libreoffice.org/24164
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/IoUtil.cpp b/loolwsd/IoUtil.cpp
index f024055..93a61ea 100644
--- a/loolwsd/IoUtil.cpp
+++ b/loolwsd/IoUtil.cpp
@@ -321,30 +321,6 @@ int PipeReader::readLine(std::string& line,
return 0;
}
-bool PipeReader::processOnce(std::function<bool(std::string& message)> handler,
- std::function<bool()> stopPredicate)
-{
- std::string line;
- const auto ready = readLine(line, stopPredicate);
- if (ready == 0)
- {
- // Timeout.
- return true;
- }
- else if (ready < 0)
- {
- Log::error("Error reading from pipe [" + _name + "].");
- return false;
- }
- else if (!handler(line))
- {
- Log::info("Pipe [" + _name + "] handler requested to finish.");
- return false;
- }
-
- return true;
-}
-
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/IoUtil.hpp b/loolwsd/IoUtil.hpp
index a9ed2ef..476f515 100644
--- a/loolwsd/IoUtil.hpp
+++ b/loolwsd/IoUtil.hpp
@@ -50,19 +50,13 @@ namespace IoUtil
const std::string& getName() const { return _name; }
- /// Processes a single line read and invoking stopPredicate
- /// to check for termination condition.
- /// Intended to be called from a polling loop.
- bool processOnce(std::function<bool(std::string& message)> handler,
- std::function<bool()> stopPredicate);
-
- private:
/// Reads a single line from the pipe.
/// Returns 0 for timeout, <0 for error, and >0 on success.
/// On success, line will contain the read message.
int readLine(std::string& line,
std::function<bool()> stopPredicate);
+ private:
const std::string _name;
const int _pipe;
std::string _data;
diff --git a/loolwsd/LOOLForKit.cpp b/loolwsd/LOOLForKit.cpp
index 4d7ba5f..a6fd559 100644
--- a/loolwsd/LOOLForKit.cpp
+++ b/loolwsd/LOOLForKit.cpp
@@ -52,19 +52,37 @@ int ClientPortNumber = DEFAULT_CLIENT_PORT_NUMBER;
static int pipeFd = -1;
-class ChildDispatcher
+class ChildDispatcher : public IoUtil::PipeReader
{
public:
- ChildDispatcher() :
- _wsdPipeReader("wsd_pipe_rd", pipeFd)
+ ChildDispatcher(const int pipeFd) :
+ PipeReader("wsd_pipe_rd", pipeFd)
{
}
/// 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; });
+ std::string line;
+ const auto ready = readLine(line, [](){ return TerminationFlag; });
+ if (ready == 0)
+ {
+ // Timeout.
+ return true;
+ }
+ else if (ready < 0)
+ {
+ // Termination is done via SIGINT, which breaks the wait.
+ if (!TerminationFlag)
+ {
+ Log::error("Error reading from pipe [" + getName() + "].");
+ }
+
+ return false;
+ }
+
+ handleInput(line);
+ return true;
}
private:
@@ -88,9 +106,6 @@ private:
}
}
}
-
-private:
- IoUtil::PipeReader _wsdPipeReader;
};
static int createLibreOfficeKit(const std::string& childRoot,
@@ -264,7 +279,7 @@ int main(int argc, char** argv)
std::exit(Application::EXIT_SOFTWARE);
}
- ChildDispatcher childDispatcher;
+ ChildDispatcher childDispatcher(pipeFd);
Log::info("ForKit process is ready.");
while (!TerminationFlag)
More information about the Libreoffice-commits
mailing list