[Libreoffice-commits] online.git: kit/Kit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Jan 30 08:07:22 UTC 2017
kit/Kit.cpp | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
New commits:
commit 7f15ef7ba0930f90c8d5a08c4beae5584a9e0a8e
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Mon Jan 30 02:02:55 2017 -0500
wsd: minimize locking when generating viewinfo
Change-Id: I48b9465a3813aeabb0229c46f210771b82b1f8d1
Reviewed-on: https://gerrit.libreoffice.org/33683
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index ad47009..b18602e 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -1033,8 +1033,6 @@ private:
std::map<int, UserInfo> viewInfoMap = getViewInfo();
std::map<std::string, int> viewColorsMap = getViewColors();
- std::unique_lock<std::mutex> lock(_mutex);
-
// Double check if list of viewids from core and our list matches,
// and create an array of JSON objects containing id and username
Array::Ptr viewInfoArray = new Array();
@@ -1044,38 +1042,43 @@ private:
Object::Ptr viewInfoObj = new Object();
viewInfoObj->set("id", viewId);
int color = 0;
- if (viewInfoMap.find(viewId) == viewInfoMap.end())
+ const auto itView = viewInfoMap.find(viewId);
+ if (itView == viewInfoMap.end())
{
LOG_ERR("No username found for viewId [" << viewId << "].");
viewInfoObj->set("username", "Unknown");
}
else
{
- viewInfoObj->set("userid", viewInfoMap[viewId].userid);
- viewInfoObj->set("username", viewInfoMap[viewId].username);
- if (viewColorsMap.find(viewInfoMap[viewId].username) != viewColorsMap.end())
+ viewInfoObj->set("userid", itView->second.userid);
+ const auto username = itView->second.username;
+ viewInfoObj->set("username", username);
+ const auto it = viewColorsMap.find(username);
+ if (it != viewColorsMap.end())
{
- color = viewColorsMap[viewInfoMap[viewId].username];
+ color = it->second;
}
}
viewInfoObj->set("color", color);
-
viewInfoArray->set(arrayIndex++, viewInfoObj);
}
std::ostringstream ossViewInfo;
viewInfoArray->stringify(ossViewInfo);
+ const auto msg = "viewinfo: " + ossViewInfo.str();
+
+ std::unique_lock<std::mutex> lock(_mutex);
// Broadcast updated viewinfo to all _active_ connections.
// These are internal sockets, so unless WSD is chocked,
// no need to send on separate thread.
for (const auto& pair : _sessions)
{
- const auto session = pair.second;
+ const auto& session = pair.second;
if (!session->isCloseFrame() && session->isActive())
{
- session->sendTextFrame("viewinfo: " + ossViewInfo.str());
+ session->sendTextFrame(msg);
}
}
}
More information about the Libreoffice-commits
mailing list