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

Ashod Nakashian ashod.nakashian at collabora.co.uk
Thu Apr 13 03:54:37 UTC 2017


 wsd/DocumentBroker.cpp |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

New commits:
commit ed51fafecef9424a71cca73edf8bb428d835f372
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Wed Apr 12 21:19:51 2017 -0400

    wsd: DocBroker is Alive if not flagged to stop
    
    There is a race between creating and adding
    a DocBroker into the DocBrokers container
    and cleanupDocBrokers is invoked (on timer)
    before it had a chance to start its poll
    thread. This is exceedingly rare, but it
    has happened.
    
    We check that_stop==false flag when deciding
    isAlive such that cleanDocBrokers will
    not remove it before its thread had
    a chance to run (which would happen
    after adding it and creating the
    ClientSession).
    
    Also, no point in checking isAlive from
    the polling thread itself (of course it is
    alive).
    
    Change-Id: If54fe2b5fce0697ee0e2f38f1662c71105e29347
    Reviewed-on: https://gerrit.libreoffice.org/36500
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 3cac2e70..e0c8b05b 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -242,7 +242,7 @@ void DocumentBroker::pollThread()
 
         // If all sessions have been removed, no reason to linger.
         if ((isLoaded() || _markToDestroy) && notSaving &&
-            (_sessions.empty() || !isAlive() || idle))
+            (_sessions.empty() || idle))
         {
             LOG_INF("Terminating " << (idle ? "idle" : "dead") <<
                     " DocumentBroker for docKey [" << getDocKey() << "].");
@@ -292,8 +292,8 @@ void DocumentBroker::pollThread()
 
 bool DocumentBroker::isAlive() const
 {
-    if (_poll->isAlive())
-        return true; // Polling thread still running.
+    if (!_stop || _poll->isAlive())
+        return true; // Polling thread not started or still running.
 
     // Shouldn't have live child process outside of the polling thread.
     return _childProcess && _childProcess->isAlive();


More information about the Libreoffice-commits mailing list