wsd/LOOLWSD.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
New commits: commit 8481e9c21d1f0b8435b96c35fa95aaec2100803b Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Wed Dec 21 18:11:38 2016 -0500 wsd: improved logging of child process management Change-Id: Iaa1f333e3fe427219f244f913834a46a80377032 Reviewed-on: https://gerrit.libreoffice.org/32549 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 607372f..dc22e7f 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -329,7 +329,7 @@ static bool cleanupChildren() { if (!NewChildren[i]->isAlive()) { - LOG_WRN("Removing unused dead child [" << NewChildren[i]->getPid() << "]."); + LOG_WRN("Removing dead spare child [" << NewChildren[i]->getPid() << "]."); NewChildren.erase(NewChildren.begin() + i); removed = true; } @@ -382,12 +382,16 @@ static void prespawnChildren() OutstandingForks = 0; } + const auto available = NewChildren.size(); int balance = LOOLWSD::NumPreSpawnedChildren; - balance -= NewChildren.size(); + balance -= available; balance -= OutstandingForks; - if (rebalance || durationMs >= CHILD_TIMEOUT_MS) + if (balance > 0 && (rebalance || durationMs >= CHILD_TIMEOUT_MS)) { + LOG_DBG("prespawnChildren: Have " << available << " spare " << + (available == 1 ? "child" : "children") << + ", forking " << balance << " more."); forkChildren(balance); } } @@ -399,9 +403,10 @@ static size_t addNewChild(const std::shared_ptr<ChildProcess>& child) --OutstandingForks; NewChildren.emplace_back(child); const auto count = NewChildren.size(); + LOG_INF("Have " << count << " spare " << + (count == 1 ? "child" : "children") << " after adding."); lock.unlock(); - LOG_INF("Have " << count << " " << (count == 1 ? "child." : "children.")); NewChildrenCV.notify_one(); return count; } @@ -430,14 +435,21 @@ static std::shared_ptr<ChildProcess> getNewChild() balance = std::max(balance, 0); } - LOG_DBG("getNewChild: Have " << available << " children, forking " << balance); - forkChildren(balance); + if (balance > 0) + { + LOG_DBG("getNewChild: Have " << available << " spare " << + (available == 1 ? "child" : "children") << + ", forking " << balance << " more."); + forkChildren(balance); + } const auto timeout = chrono::milliseconds(CHILD_TIMEOUT_MS); if (NewChildrenCV.wait_for(lock, timeout, []() { return !NewChildren.empty(); })) { auto child = NewChildren.back(); NewChildren.pop_back(); + LOG_DBG("getNewChild: Have " << available << " spare " << + (available == 1 ? "child" : "children") << " after poping."); // Validate before returning. if (child && child->isAlive()) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits