wsd/DocumentBroker.cpp |   12 ++++++++++++
 wsd/DocumentBroker.hpp |    2 +-
 wsd/LOOLWSD.cpp        |   32 +++++++-------------------------
 3 files changed, 20 insertions(+), 26 deletions(-)

New commits:
commit 90127ac0e3e7d4dd90e3143c7b310249c274c1a9
Author: Michael Meeks <michael.me...@collabora.com>
Date:   Thu Apr 6 17:58:41 2017 +0100

    Let the DocBroker thread clean itself up and expire.
    
    (cherry picked from commit 2e372b70b32d4e052458547daa229c537442774f)
    
    Change-Id: I5835c83f44ef770fa6ccd2418fc6ca73e17694e4
    Reviewed-on: https://gerrit.libreoffice.org/36225
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index a5a995df..0ee99738 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -241,6 +241,18 @@ void DocumentBroker::pollThread()
             LOG_INF("No more sessions in doc [" << _docKey << "]. 
Terminating.");
             _stop = true;
         }
+
+        // Remove idle documents after 1 hour.
+        const bool idle = getIdleTimeSecs() >= 3600;
+
+        // Cleanup used and dead entries.
+        if ((isLoaded() || _markToDestroy) &&
+            (getSessionsCount() == 0 || !isAlive() || idle))
+        {
+            LOG_INF("Terminating " << (idle ? "idle" : "dead") <<
+                    " DocumentBroker for docKey [" << getDocKey() << "].");
+            _stop = true;
+        }
     }
 
     LOG_INF("Finished polling doc [" << _docKey << "]. stop: " << _stop << ", 
continuePolling: " <<
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index d05437e9..fd8d20e8 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -304,7 +304,7 @@ public:
     void handleTileCombinedResponse(const std::vector<char>& payload);
 
     void destroyIfLastEditor(const std::string& id);
-    bool isMarkedToDestroy() const { return _markToDestroy; }
+    bool isMarkedToDestroy() const { return _markToDestroy || _stop; }
 
     bool handleInput(const std::vector<char>& payload);
 
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index e5d4cb68..439ab67e 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -235,33 +235,15 @@ void cleanupDocBrokers()
     {
         auto docBroker = it->second;
 
-        // If document busy at the moment, cleanup later.
-        auto lock = docBroker->getDeferredLock();
-        if (lock.try_lock())
+        // Remove only when not alive.
+        if (!docBroker->isAlive())
         {
-            // Remove idle documents after 1 hour.
-            const bool idle = (docBroker->getIdleTimeSecs() >= 3600);
-
-            // Cleanup used and dead entries.
-            if ((docBroker->isLoaded() || docBroker->isMarkedToDestroy()) &&
-                (docBroker->getSessionsCount() == 0 || !docBroker->isAlive() 
|| idle))
-            {
-                LOG_INF("Terminating " << (idle ? "idle" : "dead") <<
-                        " DocumentBroker for docKey [" << it->first << "].");
-                docBroker->stop();
-
-                // Remove only when not alive.
-                if (!docBroker->isAlive())
-                {
-                    LOG_INF("Removing " << (idle ? "idle" : "dead") <<
-                            " DocumentBroker for docKey [" << it->first << 
"].");
-                    it = DocBrokers.erase(it);
-                    continue;
-                }
-            }
+            LOG_INF("Removing DocumentBroker for docKey [" << it->first << 
"].");
+            it = DocBrokers.erase(it);
+            continue;
+        } else {
+            ++it;
         }
-
-        ++it;
     }
 
     if (count != DocBrokers.size())
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to