kit/Kit.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
New commits: commit 2fcf6220f15368286ed8d20b4eea42ed8de74c83 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Fri Dec 23 16:19:41 2016 -0500 wsd: log documentLoad call and duration Change-Id: Ia1633ee6d57de5c13926a808f9adc2a85a9c839c Reviewed-on: https://gerrit.libreoffice.org/32603 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/kit/Kit.cpp b/kit/Kit.cpp index 8d7ee2a..5dcd695 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -1118,9 +1118,11 @@ private: _jailedUrl = uri; _isDocPasswordProtected = false; - LOG_DBG("Calling lokit::documentLoad."); + LOG_DBG("Calling lokit::documentLoad(" << uri << ")."); + Timestamp timestamp; _loKitDocument.reset(_loKit->documentLoad(uri.c_str())); - LOG_DBG("Returned lokit::documentLoad."); + LOG_DBG("Returned lokit::documentLoad(" << uri << ") in " << (timestamp.elapsed() / 1000.) << "ms."); + std::unique_lock<std::mutex> l(_documentMutex); lockLokDoc.swap(l); @@ -1161,6 +1163,8 @@ private: std::unique_lock<std::mutex> l(_documentMutex); lockLokDoc.swap(l); + LOG_INF("Document with url [" << uri << "] already loaded. Need to create new view for session [" << sessionId << "]."); + // Check if this document requires password if (_isDocPasswordProtected) { commit ad2a9b90e4902e8320c7dea8df1f66b165dccab2 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Fri Dec 23 16:49:03 2016 -0500 wsd: lock when accessing session container Change-Id: I3216036ee7ad4cf86b27dea35de97dae1baf67c7 Reviewed-on: https://gerrit.libreoffice.org/32605 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/kit/Kit.cpp b/kit/Kit.cpp index 32445bd..8d7ee2a 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -1264,20 +1264,29 @@ private: std::string sessionId; if (LOOLProtocol::parseNameValuePair(prefix, name, sessionId, '-') && name == "child") { + std::unique_lock<std::mutex> lock(_mutex); + const auto it = _sessions.find(sessionId); if (it != _sessions.end()) { + auto session = it->second; + static const std::string disconnect("disconnect"); if (size == disconnect.size() && strncmp(data, disconnect.data(), disconnect.size()) == 0) { LOG_DBG("Removing ChildSession " << sessionId); - _oldSessionIds[it->second->getViewId()] = UserInfo({it->second->getViewUserId(), it->second->getViewUserName()}); + _oldSessionIds[session->getViewId()] = UserInfo({session->getViewUserId(), session->getViewUserName()}); _sessions.erase(it); + + // No longer needed, and allow session dtor to take it. + lock.unlock(); + session.reset(); return true; } - auto session = it->second; + // No longer needed, and allow the handler to take it. + lock.unlock(); if (session) { return session->handleInput(data, size); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits