[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-4-0' - wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp wsd/LOOLWSD.cpp
Michael Meeks (via logerrit)
logerrit at kemper.freedesktop.org
Fri Oct 4 15:24:16 UTC 2019
wsd/DocumentBroker.cpp | 13 +++++++++++--
wsd/DocumentBroker.hpp | 8 +++++++-
wsd/LOOLWSD.cpp | 7 ++++---
3 files changed, 22 insertions(+), 6 deletions(-)
New commits:
commit c1f6b75776a450866cb2f426ea631abb0bb6582b
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Fri Oct 4 10:30:49 2019 +0100
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Oct 4 17:23:58 2019 +0200
belt & braces fix erroneous popup of limit dialog
The shared_ptr allows the DocumentBroker's and ConvertToBroker to linger
after they are removed from the list, making ConvertToBroker::getInstanceCount
potentially larger than the number of documents transiently. Fix this
with a dispose method called on list removal.
Also make the arithmetic signed, to avoid unfortunate wrapping.
Also when the limit is large, don't show a message whatever happens.
Change-Id: Id2571429de48ae75e851c3fdc49e24a02aaaf6e9
Reviewed-on: https://gerrit.libreoffice.org/80193
Reviewed-by: Aron Budea <aron.budea at collabora.com>
Tested-by: Aron Budea <aron.budea at collabora.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 253774249..dae6da707 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -1938,10 +1938,19 @@ ConvertToBroker::ConvertToBroker(const std::string& uri,
NumConverters++;
}
+void ConvertToBroker::dispose()
+{
+ if (!_uriOrig.empty())
+ {
+ NumConverters--;
+ removeFile(_uriOrig);
+ _uriOrig.clear();
+ }
+}
+
ConvertToBroker::~ConvertToBroker()
{
- NumConverters--;
- removeFile(_uriOrig);
+ dispose();
}
void ConvertToBroker::removeFile(const std::string &uriOrig)
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 55216a0a9..24a5e1ac9 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -225,6 +225,9 @@ public:
virtual ~DocumentBroker();
+ /// Called when removed from the DocBrokers list
+ virtual void dispose() {}
+
/// Start processing events
void startThread();
@@ -403,7 +406,7 @@ private:
void getIOStats(uint64_t &sent, uint64_t &recv);
protected:
- const std::string _uriOrig;
+ std::string _uriOrig;
private:
const Poco::URI _uriPublic;
/// URL-based key. May be repeated during the lifetime of WSD.
@@ -482,6 +485,9 @@ public:
const std::string& docKey);
virtual ~ConvertToBroker();
+ /// Called when removed from the DocBrokers list
+ void dispose() override;
+
/// How many live conversions are running.
static size_t getInstanceCount();
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 8eb9e31ca..9a1a46e92 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -255,8 +255,9 @@ inline void shutdownLimitReached(WebSocketHandler& ws)
inline void checkSessionLimitsAndWarnClients()
{
#ifndef MOBILEAPP
- size_t docBrokerCount = DocBrokers.size() - ConvertToBroker::getInstanceCount();
- if (docBrokerCount > LOOLWSD::MaxDocuments || LOOLWSD::NumConnections >= LOOLWSD::MaxConnections)
+ ssize_t docBrokerCount = DocBrokers.size() - ConvertToBroker::getInstanceCount();
+ if (LOOLWSD::MaxDocuments < 10000 &&
+ (docBrokerCount > LOOLWSD::MaxDocuments || LOOLWSD::NumConnections >= LOOLWSD::MaxConnections))
{
const std::string info = Poco::format(PAYLOAD_INFO_LIMIT_REACHED, LOOLWSD::MaxDocuments, LOOLWSD::MaxConnections);
LOG_INF("Sending client 'limitreached' message: " << info);
@@ -278,7 +279,6 @@ inline void checkSessionLimitsAndWarnClients()
/// connected to any document.
void alertAllUsersInternal(const std::string& msg)
{
-
std::lock_guard<std::mutex> docBrokersLock(DocBrokersMutex);
LOG_INF("Alerting all users: [" << msg << "]");
@@ -331,6 +331,7 @@ void cleanupDocBrokers()
if (!docBroker->isAlive())
{
LOG_INF("Removing DocumentBroker for docKey [" << it->first << "].");
+ docBroker->dispose();
it = DocBrokers.erase(it);
continue;
} else {
More information about the Libreoffice-commits
mailing list