[Libreoffice-commits] online.git: loolwsd/LOOLKit.cpp loolwsd/LOOLWSD.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Thu Jan 14 05:39:03 PST 2016


 loolwsd/LOOLKit.cpp |   76 +++++++++++++++++++++-------------------------------
 loolwsd/LOOLWSD.cpp |    3 +-
 2 files changed, 34 insertions(+), 45 deletions(-)

New commits:
commit c2af36d0ef99b509bd5087704c7afa8e61721ce7
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Tue Jan 12 17:47:50 2016 -0500

    loolwsd: simplified Connection
    
    Change-Id: Ia7ff0d4b636513ce1b08641bb6db85c97ee5c2f9
    Reviewed-on: https://gerrit.libreoffice.org/21468
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 2fa260d..2093825 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -316,30 +316,22 @@ private:
 class Connection: public Runnable
 {
 public:
-    Connection(LibreOfficeKit *loKit, LibreOfficeKitDocument *loKitDocument,
-               const std::string& jailId, const std::string& sessionId,
-               std::function<LibreOfficeKitDocument*(const std::string&, const std::string&)> onLoad,
-               std::function<void(const std::string&)> onUnload) :
-        _loKit(loKit),
-        _loKitDocument(loKitDocument),
-        _jailId(jailId),
-        _sessionId(sessionId),
-        _stop(false),
-        _onLoad(onLoad),
-        _onUnload(onUnload)
+    Connection(std::shared_ptr<ChildProcessSession> session,
+               std::shared_ptr<WebSocket> ws) :
+        _session(session),
+        _ws(ws),
+        _stop(false)
     {
-        Log::info("Connection ctor in child: " + _jailId + ", thread: " + _sessionId);
+        Log::info("Connection ctor in child for " + _session->getId());
     }
 
     ~Connection()
     {
-        Log::info("~Connection dtor in child: " + _jailId + ", thread: " + _sessionId);
+        Log::info("~Connection dtor in child for " + _session->getId());
         stop();
     }
 
-    const std::string& getSessionId() const { return _sessionId; }
     std::shared_ptr<WebSocket> getWebSocket() const { return _ws; }
-
     std::shared_ptr<ChildProcessSession> getSession() { return _session; }
 
     void start()
@@ -364,7 +356,7 @@ public:
 
     void run() override
     {
-        static const std::string thread_name = "kit_ws_" + _sessionId;
+        static const std::string thread_name = "kit_ws_" + _session->getId();
 #ifdef __linux
         if (prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(thread_name.c_str()), 0, 0, 0) != 0)
             Log::error("Cannot set thread name to " + thread_name + ".");
@@ -373,23 +365,6 @@ public:
 
         try
         {
-            // Open websocket connection between the child process and the
-            // parent. The parent forwards us requests that it can't handle.
-
-            HTTPClientSession cs("127.0.0.1", MASTER_PORT_NUMBER);
-            cs.setTimeout(0);
-            HTTPRequest request(HTTPRequest::HTTP_GET, CHILD_URI + _sessionId);
-            HTTPResponse response;
-            _ws = std::make_shared<WebSocket>(cs, request, response);
-
-            _session.reset(new ChildProcessSession(_sessionId, _ws, _loKit, _loKitDocument, _jailId, _onLoad, _onUnload));
-            _ws->setReceiveTimeout(0);
-
-            // child Jail TID PID
-            std::string hello("child " + _jailId + " " +
-                              _sessionId + " " + std::to_string(Process::id()));
-            _session->sendTextFrame(hello);
-
             TileQueue queue;
             QueueHandler handler(queue, _session, "kit_queue_" + _session->getId());
 
@@ -405,9 +380,12 @@ public:
 
                 if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)
                 {
-                    std::string firstLine = getFirstLine(buffer, n);
+                    const std::string firstLine = getFirstLine(buffer, n);
                     if (firstLine == "eof")
+                    {
+                        Log::info("Recieved EOF. Finishing.");
                         break;
+                    }
 
                     StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
 
@@ -446,16 +424,10 @@ public:
     }
 
 private:
-    LibreOfficeKit *_loKit;
-    LibreOfficeKitDocument *_loKitDocument;
-    const std::string _jailId;
-    const std::string _sessionId;
     Thread _thread;
     std::shared_ptr<ChildProcessSession> _session;
-    volatile bool _stop;
-    std::function<LibreOfficeKitDocument*(const std::string&, const std::string&)> _onLoad;
-    std::function<void(const std::string&)> _onUnload;
     std::shared_ptr<WebSocket> _ws;
+    volatile bool _stop;
 };
 
 // A document container.
@@ -554,10 +526,26 @@ public:
                     << " view for url: " << _url << "for thread: " << sessionId
                     << " on child: " << _jailId << Log::end;
 
-        auto thread = std::make_shared<Connection>(_loKit, _loKitDocument, _jailId, sessionId,
-                                                   [this](const std::string& id, const std::string& uri) { return onLoad(id, uri); },
-                                                   [this](const std::string& id) { onUnload(id); });
+        // Open websocket connection between the child process and the
+        // parent. The parent forwards us requests that it can't handle.
+
+        HTTPClientSession cs("127.0.0.1", MASTER_PORT_NUMBER);
+        cs.setTimeout(0);
+        HTTPRequest request(HTTPRequest::HTTP_GET, CHILD_URI + sessionId);
+        HTTPResponse response;
+
+        auto ws = std::make_shared<WebSocket>(cs, request, response);
+        ws->setReceiveTimeout(0);
+
+        auto session = std::make_shared<ChildProcessSession>(sessionId, ws, _loKit, _loKitDocument, _jailId,
+                            [this](const std::string& id, const std::string& uri) { return onLoad(id, uri); },
+                            [this](const std::string& id) { onUnload(id); });
+        // child Jail TID PID
+        std::string hello("child " + _jailId + " " +
+                          sessionId + " " + std::to_string(Process::id()));
+        session->sendTextFrame(hello);
 
+        auto thread = std::make_shared<Connection>(session, ws);
         const auto aInserted = _connections.emplace(intSessionId, thread);
 
         if ( aInserted.second )
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index b4d1e5e..6435958 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -277,7 +277,8 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
         while (!TerminationFlag &&
                (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
         Log::debug() << "Finishing SocketProcessor. TerminationFlag: " << TerminationFlag
-                     << ", pollTimeout: " << pollTimeout << ", payload size: " << n << Log::end;
+                     << ", pollTimeout: " << pollTimeout << ", payload size: " << n
+                     << ", flags: " << std::hex << flags << Log::end;
     }
     catch (const WebSocketException& exc)
     {


More information about the Libreoffice-commits mailing list