[Libreoffice-commits] online.git: loolwsd/LOOLWSD.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Sun May 8 04:25:10 UTC 2016
loolwsd/LOOLWSD.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
New commits:
commit 21bf2ff12995fc82dbe8bee438a7017831ec2aea
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat May 7 12:16:09 2016 -0400
loolwsd: give children time to settle after forking before checking
Change-Id: If29d564f16a29f94791c28f5cb03be2ebf7219f3
Reviewed-on: https://gerrit.libreoffice.org/24740
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index fdaaf78..2495b50 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -154,6 +154,7 @@ static bool NoCapsForKit = false;
static std::vector<std::shared_ptr<ChildProcess>> newChildren;
static std::mutex newChildrenMutex;
static std::condition_variable newChildrenCV;
+static std::chrono::steady_clock::time_point lastForkRequestTime;
static std::map<std::string, std::shared_ptr<DocumentBroker>> docBrokers;
static std::mutex docBrokersMutex;
// Sessions to pre-spawned child processes that have connected but are not yet assigned a
@@ -175,6 +176,7 @@ static void forkChildren(const int number)
const std::string aMessage = "spawn " + std::to_string(number) + "\n";
Log::debug("MasterToForKit: " + aMessage.substr(0, aMessage.length() - 1));
IoUtil::writeFIFO(LOOLWSD::ForKitWritePipe, aMessage);
+ lastForkRequestTime = std::chrono::steady_clock::now();
}
}
@@ -197,6 +199,13 @@ static void prespawnChildren()
return;
}
+ const auto duration = (std::chrono::steady_clock::now() - lastForkRequestTime);
+ if (std::chrono::duration_cast<std::chrono::milliseconds>(duration).count() <= CHILD_TIMEOUT_SECS * 1000)
+ {
+ // Not enough time passed to balance children.
+ return;
+ }
+
for (int i = newChildren.size() - 1; i >= 0; --i)
{
if (!newChildren[i]->isAlive())
More information about the Libreoffice-commits
mailing list