[Libreoffice-commits] online.git: loolwsd/Admin.cpp loolwsd/IoUtil.cpp loolwsd/IoUtil.hpp loolwsd/LOOLBroker.cpp loolwsd/LOOLKit.cpp loolwsd/LOOLSession.cpp loolwsd/LOOLWSD.cpp loolwsd/Makefile.am loolwsd/MasterProcessSession.cpp loolwsd/Util.cpp loolwsd/Util.hpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Tue Mar 29 14:09:23 UTC 2016


 loolwsd/Admin.cpp                |    8 +
 loolwsd/IoUtil.cpp               |  170 +++++++++++++++++++++++++++++++++++++++
 loolwsd/IoUtil.hpp               |   44 ++++++++++
 loolwsd/LOOLBroker.cpp           |   13 +-
 loolwsd/LOOLKit.cpp              |   13 +-
 loolwsd/LOOLSession.cpp          |    7 -
 loolwsd/LOOLWSD.cpp              |    5 -
 loolwsd/Makefile.am              |    6 -
 loolwsd/MasterProcessSession.cpp |    5 -
 loolwsd/Util.cpp                 |  136 -------------------------------
 loolwsd/Util.hpp                 |   18 ----
 11 files changed, 246 insertions(+), 179 deletions(-)

New commits:
commit ce2fabb7338c3a7c3f79fedebe28d71eeda81231
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sun Mar 27 15:22:24 2016 -0400

    loolwsd: moved IO utilities into IoUtil file
    
    Change-Id: I1e8d5562787134cbb490c38b19d83b7514ec9baa
    Reviewed-on: https://gerrit.libreoffice.org/23586
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/Admin.cpp b/loolwsd/Admin.cpp
index 562bb58..be9c93a 100644
--- a/loolwsd/Admin.cpp
+++ b/loolwsd/Admin.cpp
@@ -34,6 +34,7 @@
 #include "Storage.hpp"
 #include "LOOLProtocol.hpp"
 #include "LOOLWSD.hpp"
+#include "IoUtil.hpp"
 #include "Util.hpp"
 
 using namespace LOOLProtocol;
@@ -193,10 +194,11 @@ void AdminRequestHandler::handleWSRequests(HTTPServerRequest& request, HTTPServe
                         {
                             if (std::stoi(tokens[1]))
                             {
-                                Util::writeFIFO(LOOLWSD::BrokerWritePipe, firstLine + " \r\n");
+                                IoUtil::writeFIFO(LOOLWSD::BrokerWritePipe, firstLine + " \r\n");
                             }
                         }
-                        catch(std::exception& e) {
+                        catch(std::exception& e)
+                        {
                             Log::warn() << "Could not kill given PID" << Log::end;
                         }
                     }
@@ -492,7 +494,7 @@ void Admin::run()
 
     Log::info("Thread [" + thread_name + "] started.");
 
-    Util::pollPipeForReading(pollPipeNotify, FIFO_NOTIFY, NotifyPipe,
+    IoUtil::pollPipeForReading(pollPipeNotify, FIFO_NOTIFY, NotifyPipe,
                             [this](std::string& message) { return handleInput(message); } );
 
     _memStatsTimer.cancel();
diff --git a/loolwsd/IoUtil.cpp b/loolwsd/IoUtil.cpp
new file mode 100644
index 0000000..7284eeb
--- /dev/null
+++ b/loolwsd/IoUtil.cpp
@@ -0,0 +1,170 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sys/poll.h>
+#include <sys/prctl.h>
+
+#include <cassert>
+#include <cstdlib>
+#include <cstring>
+#include <iomanip>
+#include <mutex>
+#include <sstream>
+#include <string>
+
+#include <Poco/Exception.h>
+#include <Poco/Net/WebSocket.h>
+#include <Poco/Thread.h>
+
+#include "Common.hpp"
+#include "IoUtil.hpp"
+#include "Util.hpp"
+
+namespace IoUtil
+{
+
+void shutdownWebSocket(std::shared_ptr<Poco::Net::WebSocket> ws)
+{
+    try
+    {
+        if (ws)
+            ws->shutdown();
+    }
+    catch (const Poco::IOException& exc)
+    {
+        Log::warn("Util::shutdownWebSocket: IOException: " + exc.message());
+    }
+}
+
+ssize_t writeFIFO(int pipe, const char* buffer, ssize_t size)
+{
+    ssize_t bytes = -1;
+    ssize_t count = 0;
+
+    while(true)
+    {
+        bytes = write(pipe, buffer + count, size - count);
+        if (bytes < 0)
+        {
+            if (errno == EINTR || errno == EAGAIN)
+                continue;
+
+            count = -1;
+            break;
+        }
+        else if (count + bytes < size)
+        {
+            count += bytes;
+        }
+        else
+        {
+            count += bytes;
+            break;
+        }
+    }
+
+    return count;
+}
+
+ssize_t readFIFO(int pipe, char* buffer, ssize_t size)
+{
+    ssize_t bytes;
+    do
+    {
+        bytes = read(pipe, buffer, size);
+    }
+    while (bytes < 0 && errno == EINTR);
+
+    return bytes;
+}
+
+ssize_t readMessage(int pipe, char* buffer, ssize_t size)
+{
+    struct pollfd pollPipe;
+
+    pollPipe.fd = pipe;
+    pollPipe.events = POLLIN;
+    pollPipe.revents = 0;
+
+    const int nPoll = poll(&pollPipe, 1, CHILD_TIMEOUT_SECS * 1000);
+    if ( nPoll < 0 )
+        return -1;
+
+    if ( nPoll == 0 )
+        errno = ETIME;
+
+    if( (pollPipe.revents & POLLIN) != 0 )
+        return readFIFO(pipe, buffer, size);
+
+    return -1;
+}
+
+void pollPipeForReading(pollfd& pollPipe, const std::string& targetPipeName , const int& targetPipe,
+                        std::function<void(std::string& message)> handler)
+{
+    std::string message;
+    char buffer[READ_BUFFER_SIZE];
+    char* start = buffer;
+    char* end = buffer;
+    ssize_t bytes = -1;
+
+    while (!TerminationFlag)
+    {
+        if (start == end)
+        {
+            if (poll(&pollPipe, 1, POLL_TIMEOUT_MS) < 0)
+            {
+                Log::error("Failed to poll pipe [" + targetPipeName + "].");
+                continue;
+            }
+            else if (pollPipe.revents & (POLLIN | POLLPRI))
+            {
+                bytes = readFIFO(targetPipe, buffer, sizeof(buffer));
+                if (bytes < 0)
+                {
+                    start = end = nullptr;
+                    Log::error("Error reading message from pipe [" + targetPipeName + "].");
+                    continue;
+                }
+                start = buffer;
+                end = buffer + bytes;
+            }
+            else if (pollPipe.revents & (POLLERR | POLLHUP))
+            {
+                Log::error("Broken pipe [" + targetPipeName + "] with wsd.");
+                break;
+            }
+        }
+
+        if (start != end)
+        {
+            char byteChar = *start++;
+            while (start != end && byteChar != '\r' && byteChar != '\n')
+            {
+                message += byteChar;
+                byteChar = *start++;
+            }
+
+            if (byteChar == '\r' && *start == '\n')
+            {
+                start++;
+                Log::debug(targetPipeName + " recv: " + message);
+                if (message == "eof")
+                    break;
+
+                handler(message);
+                message.clear();
+            }
+        }
+    }
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/IoUtil.hpp b/loolwsd/IoUtil.hpp
new file mode 100644
index 0000000..da3db34
--- /dev/null
+++ b/loolwsd/IoUtil.hpp
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_IOUTIL_HPP
+#define INCLUDED_IOUTIL_HPP
+
+#include <functional>
+#include <string>
+#include <memory>
+
+#include <sys/poll.h>
+
+#include <Poco/Net/WebSocket.h>
+#include <Poco/Logger.h>
+
+namespace IoUtil
+{
+    /// Call WebSocket::shutdown() ignoring Poco::IOException.
+    void shutdownWebSocket(std::shared_ptr<Poco::Net::WebSocket> ws);
+
+    ssize_t writeFIFO(int pipe, const char* buffer, ssize_t size);
+    inline
+    ssize_t writeFIFO(int pipe, const std::string& message)
+    {
+        return writeFIFO(pipe, message.c_str(), message.size());
+    }
+
+    ssize_t readFIFO(int pipe, char* buffer, ssize_t size);
+
+    ssize_t readMessage(int pipe, char* buffer, ssize_t size);
+
+    void pollPipeForReading(pollfd& pollPipe, const std::string& targetPipeName , const int& targetPipe,
+                            std::function<void(std::string& message)> handler);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp
index 88682e6..59bb30c 100644
--- a/loolwsd/LOOLBroker.cpp
+++ b/loolwsd/LOOLBroker.cpp
@@ -14,6 +14,7 @@
 
 #include "Common.hpp"
 #include "Capabilities.hpp"
+#include "IoUtil.hpp"
 #include "Util.hpp"
 
 // First include the grist of the helper process - ideally
@@ -26,7 +27,7 @@
 #define LIB_SOFFICEAPP  "lib" "sofficeapp" ".so"
 #define LIB_MERGED      "lib" "mergedlo" ".so"
 
-typedef int (LokHookPreInit)  ( const char *install_path, const char *user_profile_path );
+typedef int (LokHookPreInit)  (const char *install_path, const char *user_profile_path);
 
 using Poco::ProcessHandle;
 
@@ -103,7 +104,7 @@ namespace
                 message << "rmdoc" << " "
                         << _pid << " "
                         << "\r\n";
-                Util::writeFIFO(writerNotify, message.str());
+                IoUtil::writeFIFO(writerNotify, message.str());
                _pid = -1;
             }
 
@@ -206,7 +207,7 @@ public:
             {
                 if (_start == _end)
                 {
-                    bytes = Util::readMessage(pipeReader, _buffer, sizeof(_buffer));
+                    bytes = IoUtil::readMessage(pipeReader, _buffer, sizeof(_buffer));
                     if ( bytes < 0 )
                     {
                         _start = _end = nullptr;
@@ -248,7 +249,7 @@ public:
     bool createThread(const Process::PID pid, const std::string& session, const std::string& url)
     {
         const std::string message = "thread " + session + " " + url + "\r\n";
-        if (Util::writeFIFO(getChildPipe(pid), message) < 0)
+        if (IoUtil::writeFIFO(getChildPipe(pid), message) < 0)
         {
             Log::error("Error sending thread message to child [" + std::to_string(pid) + "].");
             return false;
@@ -277,7 +278,7 @@ public:
         {
             const auto message = "query url \r\n";
             std::string response;
-            if (Util::writeFIFO(it->second->getWritePipe(), message) < 0 ||
+            if (IoUtil::writeFIFO(it->second->getWritePipe(), message) < 0 ||
                 getResponseLine(readerChild, response) < 0)
             {
                 auto log = Log::error();
@@ -387,7 +388,7 @@ public:
 
         Log::debug("Thread [" + thread_name + "] started.");
 
-        Util::pollPipeForReading(pollPipeBroker, FIFO_LOOLWSD, readerBroker,
+        IoUtil::pollPipeForReading(pollPipeBroker, FIFO_LOOLWSD, readerBroker,
                                  [this](std::string& message) { return handleInput(message); } );
 
         Log::debug("Thread [" + thread_name + "] finished.");
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index aeb1618..a79f1db 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -52,6 +52,7 @@
 #include "LOKitHelper.hpp"
 #include "LOOLProtocol.hpp"
 #include "QueueHandler.hpp"
+#include "IoUtil.hpp"
 #include "Util.hpp"
 
 using namespace LOOLProtocol;
@@ -655,7 +656,7 @@ private:
                     << Process::id() << " "
                     << _url << " "
                     << "\r\n";
-            Util::writeFIFO(writerNotify, message.str());
+            IoUtil::writeFIFO(writerNotify, message.str());
 
             if (_multiView)
             {
@@ -707,7 +708,7 @@ private:
                 << Process::id() << " "
                 << sessionId << " "
                 << "\r\n";
-        Util::writeFIFO(writerNotify, message.str());
+        IoUtil::writeFIFO(writerNotify, message.str());
 
         return _loKitDocument;
     }
@@ -733,7 +734,7 @@ private:
                 << Process::id() << " "
                 << sessionId << " "
                 << "\r\n";
-        Util::writeFIFO(writerNotify, message.str());
+        IoUtil::writeFIFO(writerNotify, message.str());
 
         Log::info("Session " + sessionId + " is unloading. " + std::to_string(_clientViews) + " views will remain.");
 
@@ -972,7 +973,7 @@ void lokit_main(const std::string& childRoot,
                 else
                 if (pollPipeBroker.revents & (POLLIN | POLLPRI))
                 {
-                    bytes = Util::readFIFO(readerBroker, buffer, sizeof(buffer));
+                    bytes = IoUtil::readFIFO(readerBroker, buffer, sizeof(buffer));
                     if (bytes < 0)
                     {
                         start = end = nullptr;
@@ -1056,7 +1057,7 @@ void lokit_main(const std::string& childRoot,
                         response += "bad \r\n";
                     }
 
-                    Util::writeFIFO(writerBroker, response);
+                    IoUtil::writeFIFO(writerBroker, response);
 
                     // Don't log the CR LF at end
                     assert(response.length() > 2);
@@ -1099,7 +1100,7 @@ void lokit_main(const std::string& childRoot,
     message << "rmdoc" << " "
             << Process::id() << " "
             << "\r\n";
-    Util::writeFIFO(writerNotify, message.str());
+    IoUtil::writeFIFO(writerNotify, message.str());
     close(writerNotify);
 
     Log::info("Process [" + process_name + "] finished.");
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index da39bba..3272af6 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -34,6 +34,7 @@
 #include "LOOLProtocol.hpp"
 #include "LOOLSession.hpp"
 #include "TileCache.hpp"
+#include "IoUtil.hpp"
 #include "Util.hpp"
 
 using namespace LOOLProtocol;
@@ -65,7 +66,7 @@ LOOLSession::LOOLSession(const std::string& id, const Kind kind,
 
 LOOLSession::~LOOLSession()
 {
-    Util::shutdownWebSocket(_ws);
+    IoUtil::shutdownWebSocket(_ws);
 }
 
 void LOOLSession::sendTextFrame(const std::string& text)
@@ -166,7 +167,7 @@ void LOOLSession::disconnect(const std::string& reason)
             else
                 sendTextFrame("disconnect");
             _disconnected = true;
-            Util::shutdownWebSocket(_ws);
+            IoUtil::shutdownWebSocket(_ws);
         }
     }
     catch (const IOException& exc)
@@ -178,7 +179,7 @@ void LOOLSession::disconnect(const std::string& reason)
 bool LOOLSession::handleDisconnect(StringTokenizer& /*tokens*/)
 {
     _disconnected = true;
-    Util::shutdownWebSocket(_ws);
+    IoUtil::shutdownWebSocket(_ws);
     return false;
 }
 
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index b113200..5003a65 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -120,6 +120,7 @@ DEALINGS IN THE SOFTWARE.
 #include "MasterProcessSession.hpp"
 #include "QueueHandler.hpp"
 #include "Storage.hpp"
+#include "IoUtil.hpp"
 #include "Util.hpp"
 
 using namespace LOOLProtocol;
@@ -602,7 +603,7 @@ private:
         // Request a kit process for this doc.
         const std::string aMessage = "request " + id + " " + docKey + "\r\n";
         Log::debug("MasterToBroker: " + aMessage.substr(0, aMessage.length() - 2));
-        Util::writeFIFO(LOOLWSD::BrokerWritePipe, aMessage);
+        IoUtil::writeFIFO(LOOLWSD::BrokerWritePipe, aMessage);
 
         // For ToClient sessions, we store incoming messages in a queue and have a separate
         // thread that handles them. This is so that we can empty the queue when we get a
@@ -1493,7 +1494,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
     threadPool.joinAll();
 
     // Terminate child processes
-    Util::writeFIFO(LOOLWSD::BrokerWritePipe, "eof\r\n");
+    IoUtil::writeFIFO(LOOLWSD::BrokerWritePipe, "eof\r\n");
     Log::info("Requesting child process " + std::to_string(brokerPid) + " to terminate");
     Util::requestTermination(brokerPid);
 
diff --git a/loolwsd/Makefile.am b/loolwsd/Makefile.am
index c141a62..fe54269 100644
--- a/loolwsd/Makefile.am
+++ b/loolwsd/Makefile.am
@@ -10,7 +10,7 @@ AM_LDFLAGS = -pthread
 AM_ETAGSFLAGS = --c++-kinds=+p --fields=+iaS --extra=+q -R --totals=yes *
 AM_CTAGSFLAGS = $(AM_ETAGSFLAGS)
 
-shared_sources = LOOLProtocol.cpp LOOLSession.cpp MessageQueue.cpp Util.cpp
+shared_sources = LOOLProtocol.cpp LOOLSession.cpp MessageQueue.cpp IoUtil.cpp Util.cpp
 
 loolwsd_SOURCES = LOOLWSD.cpp ChildProcessSession.cpp MasterProcessSession.cpp TileCache.cpp Admin.cpp DocumentBroker.cpp $(shared_sources)
 
@@ -20,7 +20,7 @@ loadtest_SOURCES = LoadTest.cpp Util.cpp LOOLProtocol.cpp
 
 connect_SOURCES = Connect.cpp Util.cpp LOOLProtocol.cpp
 
-lokitclient_SOURCES = LOKitClient.cpp Util.cpp
+lokitclient_SOURCES = LOKitClient.cpp IoUtil.cpp Util.cpp
 
 broker_shared_sources = ChildProcessSession.cpp $(shared_sources)
 
@@ -33,7 +33,7 @@ loolmap_SOURCES = loolmap.c
 noinst_HEADERS = LOKitHelper.hpp LOOLProtocol.hpp LOOLSession.hpp MasterProcessSession.hpp ChildProcessSession.hpp \
                  LOOLWSD.hpp LoadTest.hpp MessageQueue.hpp TileCache.hpp Util.hpp Png.hpp Common.hpp Capabilities.hpp \
                  Rectangle.hpp QueueHandler.hpp Admin.hpp Auth.hpp Storage.hpp AdminModel.hpp DocumentBroker.hpp \
-                 FileServer.hpp \
+                 FileServer.hpp IoUtil.hpp \
                  bundled/include/LibreOfficeKit/LibreOfficeKit.h bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h \
                  bundled/include/LibreOfficeKit/LibreOfficeKitInit.h bundled/include/LibreOfficeKit/LibreOfficeKitTypes.h
 
diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp
index 0fbf70c..459bdc7 100644
--- a/loolwsd/MasterProcessSession.cpp
+++ b/loolwsd/MasterProcessSession.cpp
@@ -21,6 +21,7 @@
 #include "Rectangle.hpp"
 #include "Storage.hpp"
 #include "TileCache.hpp"
+#include "IoUtil.hpp"
 #include "Util.hpp"
 
 using namespace LOOLProtocol;
@@ -752,7 +753,7 @@ void MasterProcessSession::dispatchChild()
             // request again new URL session
             const std::string message = "request " + getId() + " " + _docBroker->getDocKey() + "\r\n";
             Log::trace("MasterToBroker: " + message.substr(0, message.length()-2));
-            Util::writeFIFO(LOOLWSD::BrokerWritePipe, message);
+            IoUtil::writeFIFO(LOOLWSD::BrokerWritePipe, message);
         }
     }
 
@@ -768,7 +769,7 @@ void MasterProcessSession::dispatchChild()
     if (retries < 0 && !isFound)
     {
         Log::error(getName() + ": Failed to connect to child. Shutting down socket.");
-        Util::shutdownWebSocket(_ws);
+        IoUtil::shutdownWebSocket(_ws);
         return;
     }
 
diff --git a/loolwsd/Util.cpp b/loolwsd/Util.cpp
index 477cffd..44cee5c 100644
--- a/loolwsd/Util.cpp
+++ b/loolwsd/Util.cpp
@@ -282,19 +282,6 @@ namespace Util
         return true;
     }
 
-    void shutdownWebSocket(std::shared_ptr<Poco::Net::WebSocket> ws)
-    {
-        try
-        {
-            if (ws)
-                ws->shutdown();
-        }
-        catch (const Poco::IOException& exc)
-        {
-            Log::warn("Util::shutdownWebSocket: IOException: " + exc.message());
-        }
-    }
-
     std::string signalName(const int signo)
     {
         switch (signo)
@@ -355,69 +342,6 @@ namespace Util
         }
     }
 
-    ssize_t writeFIFO(int pipe, const char* buffer, ssize_t size)
-    {
-        ssize_t bytes = -1;
-        ssize_t count = 0;
-
-        while(true)
-        {
-            bytes = write(pipe, buffer + count, size - count);
-            if (bytes < 0)
-            {
-                if (errno == EINTR || errno == EAGAIN)
-                    continue;
-
-                count = -1;
-                break;
-            }
-            else if (count + bytes < size)
-            {
-                count += bytes;
-            }
-            else
-            {
-                count += bytes;
-                break;
-            }
-        }
-
-        return count;
-    }
-
-    ssize_t readFIFO(int pipe, char* buffer, ssize_t size)
-    {
-        ssize_t bytes;
-        do
-        {
-            bytes = read(pipe, buffer, size);
-        }
-        while (bytes < 0 && errno == EINTR);
-
-        return bytes;
-    }
-
-    ssize_t readMessage(int pipe, char* buffer, ssize_t size)
-    {
-        struct pollfd pollPipe;
-
-        pollPipe.fd = pipe;
-        pollPipe.events = POLLIN;
-        pollPipe.revents = 0;
-
-        const int nPoll = poll(&pollPipe, 1, CHILD_TIMEOUT_SECS * 1000);
-        if ( nPoll < 0 )
-            return -1;
-
-        if ( nPoll == 0 )
-            errno = ETIME;
-
-        if( (pollPipe.revents & POLLIN) != 0 )
-            return readFIFO(pipe, buffer, size);
-
-        return -1;
-    }
-
     static
     void handleTerminationSignal(const int signal)
     {
@@ -557,66 +481,6 @@ namespace Util
         }
     }
 
-    void pollPipeForReading(pollfd& pollPipe, const std::string& targetPipeName , const int& targetPipe,
-                            std::function<void(std::string& message)> handler)
-    {
-        std::string message;
-        char buffer[READ_BUFFER_SIZE];
-        char* start = buffer;
-        char* end = buffer;
-        ssize_t bytes = -1;
-
-        while (!TerminationFlag)
-        {
-            if (start == end)
-            {
-                if (poll(&pollPipe, 1, POLL_TIMEOUT_MS) < 0)
-                {
-                    Log::error("Failed to poll pipe [" + targetPipeName + "].");
-                    continue;
-                }
-                else if (pollPipe.revents & (POLLIN | POLLPRI))
-                {
-                    bytes = Util::readFIFO(targetPipe, buffer, sizeof(buffer));
-                    if (bytes < 0)
-                    {
-                        start = end = nullptr;
-                        Log::error("Error reading message from pipe [" + targetPipeName + "].");
-                        continue;
-                    }
-                    start = buffer;
-                    end = buffer + bytes;
-                }
-                else if (pollPipe.revents & (POLLERR | POLLHUP))
-                {
-                    Log::error("Broken pipe [" + targetPipeName + "] with wsd.");
-                    break;
-                }
-            }
-
-            if (start != end)
-            {
-                char byteChar = *start++;
-                while (start != end && byteChar != '\r' && byteChar != '\n')
-                {
-                    message += byteChar;
-                    byteChar = *start++;
-                }
-
-                if (byteChar == '\r' && *start == '\n')
-                {
-                    start++;
-                    Log::debug(targetPipeName + " recv: " + message);
-                    if (message == "eof")
-                        break;
-
-                    handler(message);
-                    message.clear();
-                }
-            }
-        }
-    }
-
     unsigned getMemoryUsage(Poco::Process::PID nPid)
     {
         //TODO: Instead of RSS, return PSS
diff --git a/loolwsd/Util.hpp b/loolwsd/Util.hpp
index c496287..ae3f938 100644
--- a/loolwsd/Util.hpp
+++ b/loolwsd/Util.hpp
@@ -14,7 +14,6 @@
 #include <sstream>
 #include <functional>
 #include <memory>
-#include <sys/poll.h>
 
 #include <Poco/File.h>
 #include <Poco/Path.h>
@@ -74,20 +73,6 @@ namespace Util
                               int bufferWidth, int bufferHeight,
                               std::vector<char>& output, LibreOfficeKitTileMode mode);
 
-    /// Call WebSocket::shutdown() ignoring Poco::IOException.
-    void shutdownWebSocket(std::shared_ptr<Poco::Net::WebSocket> ws);
-
-    ssize_t writeFIFO(int pipe, const char* buffer, ssize_t size);
-    inline
-    ssize_t writeFIFO(int pipe, const std::string& message)
-    {
-        return writeFIFO(pipe, message.c_str(), message.size());
-    }
-
-    ssize_t readFIFO(int pipe, char* buffer, ssize_t size);
-
-    ssize_t readMessage(int pipe, char* buffer, ssize_t size);
-
     /// Safely remove a file or directory.
     /// Supresses exception when the file is already removed.
     /// This can happen when there is a race (unavoidable) or when
@@ -141,9 +126,6 @@ namespace Util
 
     void requestTermination(const Poco::Process::PID& pid);
 
-    void pollPipeForReading(pollfd& pollPipe, const std::string& targetPipeName , const int& targetPipe,
-                            std::function<void(std::string& message)> handler);
-
     unsigned getMemoryUsage(Poco::Process::PID nPid);
 };
 


More information about the Libreoffice-commits mailing list