loolwsd/LOOLKit.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
New commits: commit c83f3937d4faeac4eda2a03a9eac3244429ef46b Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sun Jan 10 10:34:47 2016 -0500 loolwsd: Document locks and view counters Change-Id: I2bae3fd7136e5bb85276f5cad246497e51fbfdd0 Reviewed-on: https://gerrit.libreoffice.org/21328 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index 35fc483..7e2f8ad 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -485,6 +485,8 @@ public: ~Document() { + std::unique_lock<std::mutex> lock(_mutex); + Log::info("~Document dtor for url [" + _url + "] on child [" + _jailId + "]. There are " + std::to_string(_clientViews) + " views."); @@ -597,6 +599,8 @@ private: Document* self = reinterpret_cast<Document*>(pData); if (self) { + std::unique_lock<std::mutex> lock(self->_mutex); + for (auto& it: self->_connections) { if (it.second->isRunning()) @@ -615,6 +619,10 @@ private: /// Load a document (or view) and register callbacks. LibreOfficeKitDocument* onLoad(const std::string& sessionId, const std::string& uri) { + std::unique_lock<std::mutex> lock(_mutex); + + Log::info("Session " + sessionId + " is unloading. " + std::to_string(_clientViews) + " views loaded."); + const unsigned intSessionId = Util::decodeId(sessionId); const auto it = _connections.find(intSessionId); if (it == _connections.end() || !it->second) @@ -644,16 +652,16 @@ private: _loKitDocument->pClass->registerCallback(_loKitDocument, ViewCallback, reinterpret_cast<void*>(intSessionId)); - ++_clientViews; Log::info() << "Document [" << _url << "] view [" << viewId << "] loaded, leaving " - << _clientViews << " views." << Log::end; + << (_clientViews + 1) << " views." << Log::end; } else { _loKitDocument->pClass->registerCallback(_loKitDocument, DocumentCallback, this); } + ++_clientViews; return _loKitDocument; } @@ -675,8 +683,7 @@ private: if (_multiView && _loKitDocument) { - --_clientViews; - Log::info() << "Document [" << _url << "] view [" + Log::info() << "Document [" << _url << "] session [" << sessionId << "] unloaded, leaving " << _clientViews << " views." << Log::end; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits