loolwsd/DocumentBroker.hpp | 6 +++++- loolwsd/LOOLWSD.cpp | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-)
New commits: commit 0b18a67da21debd051f151718f271cea27c30bc8 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sun Mar 13 10:04:54 2016 -0400 loolwsd: DocumentBroker cleanup Change-Id: Iedf2e0afd3c63d24b96ce1c7923c90d86d82bc13 Reviewed-on: https://gerrit.libreoffice.org/23220 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/DocumentBroker.hpp b/loolwsd/DocumentBroker.hpp index 71c9681..f4fc674 100644 --- a/loolwsd/DocumentBroker.hpp +++ b/loolwsd/DocumentBroker.hpp @@ -148,6 +148,8 @@ public: Poco::URI getJailedUri() const { return _uriJailed; } const std::string& getJailId() const { return _jailId; } const std::string& getDocKey() const { return _docKey; } + unsigned decSessions() { return --_sessionsCount; } + unsigned incSessions() { return ++_sessionsCount; } std::string getJailRoot() const { @@ -161,7 +163,8 @@ private: const std::string& childRoot) : _uriPublic(uriPublic), _docKey(docKey), - _childRoot(childRoot) + _childRoot(childRoot), + _sessionsCount(0) { assert(!_docKey.empty()); assert(!_childRoot.empty()); @@ -176,6 +179,7 @@ private: std::string _jailId; std::unique_ptr<StorageBase> _storage; std::mutex _mutex; + std::atomic<unsigned> _sessionsCount; }; #endif diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 1d63532..ca08811 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -535,6 +535,7 @@ private: auto ws = std::make_shared<WebSocket>(request, response); auto session = std::make_shared<MasterProcessSession>(id, LOOLSession::Kind::ToClient, ws, docBroker); + docBroker->incSessions(); // For ToClient sessions, we store incoming messages in a queue and have a separate // thread that handles them. This is so that we can empty the queue when we get a @@ -569,7 +570,11 @@ private: queue.put("eof"); queueHandlerThread.join(); - //TODO: Cleanup DocumentBroker. + std::unique_lock<std::mutex> lock(LOOLWSD::DocBrokersMutex); + if (docBroker->decSessions() == 0) + { + LOOLWSD::DocBrokers.erase(docKey); + } } public: _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits