loolwsd/LOOLWSD.cpp | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-)
New commits: commit 785fd972f4ffb97b0d99b5cbe3d65e9e3f5ee7e2 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat Oct 22 11:42:57 2016 -0400 loolwsd: cleanup dead children before balancing Change-Id: I782080bb83973a795e2c967d91b152095678a93e Reviewed-on: https://gerrit.libreoffice.org/30203 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index c4f5368..a526829 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -228,6 +228,25 @@ static void forkChildren(const int number) } } +/// Cleans up dead children. +/// Returns true if removed at least one. +static bool cleanupChildren() +{ + bool removed = false; + for (int i = NewChildren.size() - 1; i >= 0; --i) + { + if (!NewChildren[i]->isAlive()) + { + Log::warn() << "Removing unused dead child [" << NewChildren[i]->getPid() + << "]." << Log::end; + NewChildren.erase(NewChildren.begin() + i); + removed = true; + } + } + + return removed; +} + /// Called on startup only. static void preForkChildren() { @@ -240,6 +259,8 @@ static void preForkChildren() forkChildren(numPreSpawn); } +/// Proatively spawn children processes +/// to load documents with alacrity. static void prespawnChildren() { std::unique_lock<std::mutex> lock(NewChildrenMutex, std::defer_lock); @@ -250,19 +271,7 @@ static void prespawnChildren() } // Do the cleanup first. - bool rebalance = false; - for (int i = NewChildren.size() - 1; i >= 0; --i) - { - if (!NewChildren[i]->isAlive()) - { - Log::warn() << "Removing unused dead child [" << NewChildren[i]->getPid() - << "]." << Log::end; - NewChildren.erase(NewChildren.begin() + i); - - // Rebalance after cleanup. - rebalance = true; - } - } + const bool rebalance = cleanupChildren(); int balance = LOOLWSD::NumPreSpawnedChildren; balance -= NewChildren.size(); @@ -303,6 +312,9 @@ static std::shared_ptr<ChildProcess> getNewChild() const auto startTime = chrono::steady_clock::now(); do { + // Do the cleanup first. + cleanupChildren(); + const int available = NewChildren.size(); int balance = LOOLWSD::NumPreSpawnedChildren; if (available == 0) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits