[Libreoffice-commits] online.git: 2 commits - kit/Kit.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Mon Jan 2 05:57:42 UTC 2017


 kit/Kit.cpp |   21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

New commits:
commit 2fcf6220f15368286ed8d20b4eea42ed8de74c83
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Fri Dec 23 16:19:41 2016 -0500

    wsd: log documentLoad call and duration
    
    Change-Id: Ia1633ee6d57de5c13926a808f9adc2a85a9c839c
    Reviewed-on: https://gerrit.libreoffice.org/32603
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index 8d7ee2a..5dcd695 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -1118,9 +1118,11 @@ private:
             _jailedUrl = uri;
             _isDocPasswordProtected = false;
 
-            LOG_DBG("Calling lokit::documentLoad.");
+            LOG_DBG("Calling lokit::documentLoad(" << uri << ").");
+            Timestamp timestamp;
             _loKitDocument.reset(_loKit->documentLoad(uri.c_str()));
-            LOG_DBG("Returned lokit::documentLoad.");
+            LOG_DBG("Returned lokit::documentLoad(" << uri << ") in " << (timestamp.elapsed()  / 1000.) << "ms.");
+
             std::unique_lock<std::mutex> l(_documentMutex);
             lockLokDoc.swap(l);
 
@@ -1161,6 +1163,8 @@ private:
             std::unique_lock<std::mutex> l(_documentMutex);
             lockLokDoc.swap(l);
 
+            LOG_INF("Document with url [" << uri << "] already loaded. Need to create new view for session [" << sessionId << "].");
+
             // Check if this document requires password
             if (_isDocPasswordProtected)
             {
commit ad2a9b90e4902e8320c7dea8df1f66b165dccab2
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Fri Dec 23 16:49:03 2016 -0500

    wsd: lock when accessing session container
    
    Change-Id: I3216036ee7ad4cf86b27dea35de97dae1baf67c7
    Reviewed-on: https://gerrit.libreoffice.org/32605
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index 32445bd..8d7ee2a 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -1264,20 +1264,29 @@ private:
         std::string sessionId;
         if (LOOLProtocol::parseNameValuePair(prefix, name, sessionId, '-') && name == "child")
         {
+            std::unique_lock<std::mutex> lock(_mutex);
+
             const auto it = _sessions.find(sessionId);
             if (it != _sessions.end())
             {
+                auto session = it->second;
+
                 static const std::string disconnect("disconnect");
                 if (size == disconnect.size() &&
                     strncmp(data, disconnect.data(), disconnect.size()) == 0)
                 {
                     LOG_DBG("Removing ChildSession " << sessionId);
-                    _oldSessionIds[it->second->getViewId()] = UserInfo({it->second->getViewUserId(), it->second->getViewUserName()});
+                    _oldSessionIds[session->getViewId()] = UserInfo({session->getViewUserId(), session->getViewUserName()});
                     _sessions.erase(it);
+
+                    // No longer needed, and allow session dtor to take it.
+                    lock.unlock();
+                    session.reset();
                     return true;
                 }
 
-                auto session = it->second;
+                // No longer needed, and allow the handler to take it.
+                lock.unlock();
                 if (session)
                 {
                     return session->handleInput(data, size);


More information about the Libreoffice-commits mailing list