[Libreoffice-commits] online.git: kit/Kit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Jan 2 05:58:46 UTC 2017
kit/Kit.cpp | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
New commits:
commit 02b69738cae872aba095113831915daa999471a5
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Fri Dec 23 17:33:37 2016 -0500
wsd: always lock documentMutex around loKitDocument
The _documentMutex used to be a member of _loKitDocument,
so it couldn't be locked when _loKitDocument was null.
However this has long since changed and is independent.
So no good reason not to lock it at every access point
of _loKitDocument, which is simpler and safer.
Change-Id: I82bdff5f94b5eaf68365d8cdb3ef5779e6c6cc87
Reviewed-on: https://gerrit.libreoffice.org/32606
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 5dcd695..4a1ae08 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -612,13 +612,13 @@ public:
std::vector<unsigned char> pixmap;
pixmap.resize(output.capacity());
+ std::unique_lock<std::mutex> lock(_documentMutex);
if (!_loKitDocument)
{
LOG_ERR("Tile rendering requested before loading document.");
return;
}
- std::unique_lock<std::mutex> lock(_documentMutex);
if (_loKitDocument->getViewsCount() <= 0)
{
LOG_ERR("Tile rendering requested without views.");
@@ -685,13 +685,13 @@ public:
const size_t pixmapSize = 4 * area;
std::vector<unsigned char> pixmap(pixmapSize, 0);
+ std::unique_lock<std::mutex> lock(_documentMutex);
if (!_loKitDocument)
{
LOG_ERR("Tile rendering requested before loading document.");
return;
}
- std::unique_lock<std::mutex> lock(_documentMutex);
if (_loKitDocument->getViewsCount() <= 0)
{
LOG_ERR("Tile rendering requested without views.");
@@ -934,14 +934,14 @@ private:
const auto viewId = session.getViewId();
_tileQueue->removeCursorPosition(viewId);
+
+ std::unique_lock<std::mutex> lockLokDoc(_documentMutex);
if (_loKitDocument == nullptr)
{
LOG_ERR("Unloading session [" << sessionId << "] without loKitDocument.");
return;
}
- std::unique_lock<std::mutex> lockLokDoc(_documentMutex);
-
_loKitDocument->setView(viewId);
_loKitDocument->registerCallback(nullptr, nullptr);
_loKitDocument->destroyView(viewId);
@@ -1098,7 +1098,7 @@ private:
{
const std::string sessionId = session->getId();
- std::unique_lock<std::mutex> lockLokDoc;
+ std::unique_lock<std::mutex> lock(_documentMutex);
if (!_loKitDocument)
{
@@ -1123,9 +1123,6 @@ private:
_loKitDocument.reset(_loKit->documentLoad(uri.c_str()));
LOG_DBG("Returned lokit::documentLoad(" << uri << ") in " << (timestamp.elapsed() / 1000.) << "ms.");
- std::unique_lock<std::mutex> l(_documentMutex);
- lockLokDoc.swap(l);
-
if (!_loKitDocument || !_loKitDocument->get())
{
LOG_ERR("Failed to load: " << uri << ", error: " << _loKit->getError());
@@ -1160,9 +1157,6 @@ private:
}
else
{
- 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
@@ -1190,8 +1184,6 @@ private:
LOG_TRC("View to url [" << uri << "] created.");
}
- Util::assertIsLocked(lockLokDoc);
-
Object::Ptr renderOptsObj;
// Fill the object with renderoptions, if any
More information about the Libreoffice-commits
mailing list