[Libreoffice-commits] online.git: wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp wsd/LOOLWSD.cpp
Michael Meeks
michael.meeks at collabora.com
Thu Apr 6 06:18:34 UTC 2017
wsd/DocumentBroker.cpp | 8 +++++++-
wsd/DocumentBroker.hpp | 3 +--
wsd/LOOLWSD.cpp | 15 ++++++---------
3 files changed, 14 insertions(+), 12 deletions(-)
New commits:
commit 01519eff70f1157dbbb4cb329acc7754f34a2765
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Wed Apr 5 21:31:15 2017 +0100
Always cleanup DocBrokers in the PrisonerPoll thread.
This simplifies things, and keeps process management in one thread.
Also - wakeup the DocumentBroker when we want to stop it.
Change-Id: I597ba4b34719fc072a4b4ad3697442b5eebe5784
Reviewed-on: https://gerrit.libreoffice.org/36182
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 5a4de9e2..396bf52b 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -264,7 +264,7 @@ void DocumentBroker::pollThread()
_poll->poll(std::min(flushTimeoutMs - elapsedMs, POLL_TIMEOUT_MS / 5));
}
- // Cleanup.
+ // Async cleanup.
LOOLWSD::doHousekeeping();
LOG_INF("Finished docBroker polling thread for docKey [" << _docKey << "].");
@@ -306,6 +306,12 @@ void DocumentBroker::joinThread()
_poll->joinThread();
}
+void DocumentBroker::stop()
+{
+ _stop = true;
+ _poll->wakeup();
+}
+
bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const std::string& jailId)
{
assertCorrectThread();
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 0af441ff..d05437e9 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -222,8 +222,7 @@ public:
void startThread();
/// Flag for termination.
- //TODO: Take reason to broadcast to clients.
- void stop() { _stop = true; }
+ void stop();
/// Thread safe termination of this broker if it has a lingering thread
void joinThread();
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 08a20ce7..e5d4cb68 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -226,7 +226,7 @@ void alertAllUsersInternal(const std::string& msg)
/// Remove dead and idle DocBrokers.
/// The client of idle document should've greyed-out long ago.
/// Returns true if at least one is removed.
-bool cleanupDocBrokers()
+void cleanupDocBrokers()
{
Util::assertIsLocked(DocBrokersMutex);
@@ -277,11 +277,7 @@ bool cleanupDocBrokers()
LOG_END(logger);
}
-
- return true;
}
-
- return false;
}
/// Forks as many children as requested.
@@ -582,7 +578,7 @@ class PrisonerPoll : public TerminatingPoll {
public:
PrisonerPoll() : TerminatingPoll("prisoner_poll") {}
- /// Check prisoners are still alive and balaned.
+ /// Check prisoners are still alive and balanced.
void wakeupHook() override;
};
@@ -1099,12 +1095,13 @@ bool LOOLWSD::checkAndRestoreForKit()
#endif
}
-void PrisonerPoll::wakeupHook()
+void LOOLWSD::doHousekeeping()
{
- LOOLWSD::doHousekeeping();
+ PrisonerPoll.wakeup();
}
-void LOOLWSD::doHousekeeping()
+/// Really do the house-keeping
+void PrisonerPoll::wakeupHook()
{
if (!LOOLWSD::checkAndRestoreForKit())
{
More information about the Libreoffice-commits
mailing list