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

Ashod Nakashian ashod.nakashian at collabora.co.uk
Tue Jan 3 06:00:00 UTC 2017


 wsd/LOOLWSD.cpp |   48 +++++++++++++++---------------------------------
 1 file changed, 15 insertions(+), 33 deletions(-)

New commits:
commit 4f90c3e5b94b7e06a44a0d6f0decd33ddda5c733
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Tue Jan 3 00:17:35 2017 -0500

    wsd: simplify ClientSession removal and cleanup
    
    Change-Id: I934f17e978358bef487c5b470cd8cf5d4d747e5d
    Reviewed-on: https://gerrit.libreoffice.org/32677
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 024d3f8..7b621e5 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -1064,44 +1064,26 @@ private:
 
             // Connection terminated. Destroy session.
             LOG_DBG("Client session [" << id << "] terminated. Cleaning up.");
-            {
-                auto docLock = docBroker->getLock();
-
-                // We cannot destroy it, before save, if this is the last session.
-                // Otherwise, we may end up removing the one and only session.
-                bool removedSession = false;
-
-                // We issue a force-save when last editable (non-readonly) session is going away
-                const bool forceSave = docBroker->startDestroy(id);
 
-                auto sessionsCount = docBroker->getSessionsCount();
-                if (sessionsCount > 1)
-                {
-                    sessionsCount = docBroker->removeSession(id);
-                    removedSession = true;
-                    LOG_TRC(docKey << ", ws_sessions--: " << sessionsCount);
-                }
-
-                // If we are the last, we must wait for the save to complete.
-                if (forceSave)
-                {
-                    LOG_INF("Shutdown of the last editable (non-readonly) session, saving the document before tearing down.");
-                }
+            auto docLock = docBroker->getLock();
 
-                // We need to wait until the save notification reaches us
-                // and Storage persists the document.
-                if (!docBroker->autoSave(forceSave, COMMAND_TIMEOUT_MS, docLock))
-                {
-                    LOG_ERR("Auto-save before closing failed.");
-                }
+            // We issue a force-save when last editable (non-readonly) session is going away
+            const bool forceSave = docBroker->startDestroy(id);
+            if (forceSave)
+            {
+                LOG_INF("Shutdown of the last editable (non-readonly) session, saving the document before tearing down.");
+            }
 
-                if (!removedSession)
-                {
-                    sessionsCount = docBroker->removeSession(id);
-                    LOG_TRC(docKey << ", ws_sessions--: " << sessionsCount);
-                }
+            // We need to wait until the save notification reaches us
+            // and Storage persists the document.
+            if (!docBroker->autoSave(forceSave, COMMAND_TIMEOUT_MS, docLock))
+            {
+                LOG_ERR("Auto-save before closing failed.");
             }
 
+            const auto sessionsCount = docBroker->removeSession(id);
+            docLock.unlock();
+
             if (sessionsCount == 0)
             {
                 // We've supposedly destroyed the last session and can do away with


More information about the Libreoffice-commits mailing list