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

Ashod Nakashian ashod.nakashian at collabora.co.uk
Mon Jan 16 02:13:56 UTC 2017


 wsd/LOOLWSD.cpp |   12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

New commits:
commit f3fb3beeea67009a745ab7752789ff6068ac54e7
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sun Jan 15 12:58:32 2017 -0500

    wsd: block new requests when recovering forkit
    
    Change-Id: Ibed650b52f2398cd336332b5264439752ff9e290
    Reviewed-on: https://gerrit.libreoffice.org/33133
    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 7d55971..f040bcd 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -393,10 +393,10 @@ static bool rebalanceChildren(int balance)
 }
 
 /// Called on startup only.
-static void preForkChildren()
+static void preForkChildren(std::unique_lock<std::mutex>& lock)
 {
-    std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex);
-    std::unique_lock<std::mutex> lock(NewChildrenMutex);
+    Util::assertIsLocked(DocBrokersMutex);
+    Util::assertIsLocked(lock);
 
     int numPreSpawn = LOOLWSD::NumPreSpawnedChildren;
     UnitWSD::get().preSpawnCount(numPreSpawn);
@@ -2102,6 +2102,10 @@ Process::PID LOOLWSD::createForKit()
         args.push_back("--nocaps");
     }
 
+    // If we're recovering forkit, don't allow processing new requests.
+    std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex);
+    std::unique_lock<std::mutex> newChildrenLock(NewChildrenMutex);
+
     LOG_INF("Launching forkit process: " << forKitPath << ' ' <<
             Poco::cat(std::string(" "), args.begin(), args.end()));
 
@@ -2120,7 +2124,7 @@ Process::PID LOOLWSD::createForKit()
     Admin::instance().setForKitPid(forkitPid);
 
     // Spawn some children, if necessary.
-    preForkChildren();
+    preForkChildren(newChildrenLock);
 
     return forkitPid;
 }


More information about the Libreoffice-commits mailing list