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

Ashod Nakashian ashod.nakashian at collabora.co.uk
Sun Jan 10 20:10:22 PST 2016


 loolwsd/ChildProcessSession.cpp |    2 +-
 loolwsd/LOOLKit.cpp             |   20 ++++++++++++++------
 2 files changed, 15 insertions(+), 7 deletions(-)

New commits:
commit 5130aa214d63831d08f8ae9c746f82fdb1f72e3c
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sun Jan 10 21:55:12 2016 -0500

    loolwsd: better locking in Document
    
    Change-Id: Ia6cef55201f5505e703026a8461282b5fb79fd85
    Reviewed-on: https://gerrit.libreoffice.org/21330
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/ChildProcessSession.cpp b/loolwsd/ChildProcessSession.cpp
index 9424769..883c648 100644
--- a/loolwsd/ChildProcessSession.cpp
+++ b/loolwsd/ChildProcessSession.cpp
@@ -256,11 +256,11 @@ bool ChildProcessSession::loadDocument(const char * /*buffer*/, int /*length*/,
         _loKitDocument->pClass->setPart(_loKitDocument, part);
     }
 
-
     // Respond by the document status, which has no arguments.
     if (!getStatus(nullptr, 0))
         return false;
 
+    Log::info("Loaded session " + getId());
     return true;
 }
 
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 4750d08..f6fa52f 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -568,6 +568,8 @@ public:
 
     void purgeSessions()
     {
+        std::unique_lock<std::mutex> lock(_mutex);
+
         for (auto it =_connections.cbegin(); it != _connections.cend(); )
         {
             if (!it->second->isRunning())
@@ -581,7 +583,9 @@ public:
 
     bool hasConnections()
     {
-        return _connections.size() > 0;
+        std::unique_lock<std::mutex> lock(_mutex);
+
+        return !_connections.empty();
     }
 
 private:
@@ -619,11 +623,11 @@ private:
     /// Load a document (or view) and register callbacks.
     LibreOfficeKitDocument* onLoad(const std::string& sessionId, const std::string& uri)
     {
-        std::unique_lock<std::mutex> lock(_mutex);
-
-        Log::info("Session " + sessionId + " is unloading. " + std::to_string(_clientViews) + " views loaded.");
+        Log::info("Session " + sessionId + " is loading. " + std::to_string(_clientViews) + " views loaded.");
 
         const unsigned intSessionId = Util::decodeId(sessionId);
+
+        std::unique_lock<std::mutex> lock(_mutex);
         const auto it = _connections.find(intSessionId);
         if (it == _connections.end() || !it->second)
         {
@@ -631,6 +635,8 @@ private:
             return nullptr;
         }
 
+        lock.unlock();
+
         if (_loKitDocument == nullptr)
         {
             Log::info("Loading new document from URI: [" + uri + "] for session [" + sessionId + "].");
@@ -667,11 +673,11 @@ private:
 
     void onUnload(const std::string& sessionId)
     {
-        std::unique_lock<std::mutex> lock(_mutex);
-
         Log::info("Session " + sessionId + " is unloading. " + std::to_string(_clientViews - 1) + " views left.");
 
         const unsigned intSessionId = Util::decodeId(sessionId);
+
+        std::unique_lock<std::mutex> lock(_mutex);
         const auto it = _connections.find(intSessionId);
         if (it == _connections.end() || !it->second)
         {
@@ -679,6 +685,8 @@ private:
             return;
         }
 
+        lock.unlock();
+
         --_clientViews;
 
         if (_multiView && _loKitDocument)


More information about the Libreoffice-commits mailing list