wsd/DocumentBroker.cpp | 3 +++ wsd/LOOLWSD.cpp | 23 +++++++++++++---------- wsd/LOOLWSD.hpp | 2 ++ 3 files changed, 18 insertions(+), 10 deletions(-)
New commits: commit 1a6f6e9a65559756ead5c61804744e520ea749d3 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Mar 27 21:46:16 2017 -0400 wsd: trigger child and doc housekeeping upon terminating kit Change-Id: I7ffbadb40221c19b24fd172d1b9aabcaa8c581e5 Reviewed-on: https://gerrit.libreoffice.org/35787 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 384e66cf..32f55aae 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -1304,6 +1304,9 @@ void DocumentBroker::terminateChild(std::unique_lock<std::mutex>& lock, const st // Stop the polling thread. _poll->stop(); _stop = true; + + // Trigger cleanup. + LOOLWSD::triggerChildAndDocHousekeeping(); } void DocumentBroker::closeDocument(const std::string& reason) diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 4e2c923a..f8d6aa03 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -1112,9 +1112,6 @@ bool LOOLWSD::checkAndRestoreForKit() void PrisonerPoll::wakeupHook() { - /// FIXME: we should do this less frequently - /// currently the prisoner poll wakes up quite - /// a lot. if (!LOOLWSD::checkAndRestoreForKit()) { // No children have died. @@ -1144,6 +1141,18 @@ void PrisonerPoll::wakeupHook() #endif } } + + std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex, std::defer_lock); + if (docBrokersLock.try_lock()) + { + cleanupDocBrokers(); + } +} + +void LOOLWSD::triggerChildAndDocHousekeeping() +{ + PrisonerPoll.wakeup(); + } bool LOOLWSD::createForKit() @@ -2451,7 +2460,7 @@ int LOOLWSD::innerMain() UnitWSD::get().invokeTest(); // This timeout affects the recovery time of prespawned children. - mainWait.poll(SocketPoll::DefaultPollTimeoutMs); + mainWait.poll(SocketPoll::DefaultPollTimeoutMs * 4); // Wake the prisoner poll to spawn some children, if necessary. PrisonerPoll.wakeup(); @@ -2462,12 +2471,6 @@ int LOOLWSD::innerMain() UnitWSD::get().getTimeoutMilliSeconds()) UnitWSD::get().timeout(); - std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex, std::defer_lock); - if (docBrokersLock.try_lock()) - { - cleanupDocBrokers(); - } - #if ENABLE_DEBUG if (careerSpanSeconds > 0 && time(nullptr) > startTimeSpan + careerSpanSeconds) { diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp index 2461a0d5..d20314c1 100644 --- a/wsd/LOOLWSD.hpp +++ b/wsd/LOOLWSD.hpp @@ -99,6 +99,8 @@ public: /// Return true when successfull. static bool createForKit(); + static void triggerChildAndDocHousekeeping(); + protected: void initialize(Poco::Util::Application& self) override; void defineOptions(Poco::Util::OptionSet& options) override; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits