[Libreoffice-commits] online.git: loolwsd/ChildSession.cpp loolwsd/LibreOfficeKit.hpp loolwsd/LOOLKit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Aug 22 04:23:02 UTC 2016
loolwsd/ChildSession.cpp | 22 ++++++++++++++++------
loolwsd/LOOLKit.cpp | 2 ++
loolwsd/LibreOfficeKit.hpp | 1 +
3 files changed, 19 insertions(+), 6 deletions(-)
New commits:
commit eb38d7697bd5fbe7a982c80297c37ba41bbddfb8
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Wed Aug 17 19:51:34 2016 -0400
loolwsd: don't unload views not loaded yet
Change-Id: Iee676849cc2b9ac4f0e518e5730e921687c3a42d
Reviewed-on: https://gerrit.libreoffice.org/28286
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp
index dd0d361..51b445f 100644
--- a/loolwsd/ChildSession.cpp
+++ b/loolwsd/ChildSession.cpp
@@ -39,7 +39,7 @@ ChildSession::ChildSession(const std::string& id,
LOOLSession(id, Kind::ToMaster, ws),
_multiView(std::getenv("LOK_VIEW_CALLBACK")),
_jailId(jailId),
- _viewId(0),
+ _viewId(-1),
_docManager(docManager)
{
Log::info("ChildSession ctor [" + getName() + "].");
@@ -60,10 +60,17 @@ void ChildSession::disconnect()
sendTextFrame("remview: " + std::to_string(_viewId));
- if (_multiView && _loKitDocument)
- _loKitDocument->setView(_viewId);
+ if (_viewId >= 0)
+ {
+ if (_multiView && _loKitDocument)
+ _loKitDocument->setView(_viewId);
- _docManager.onUnload(getId());
+ _docManager.onUnload(getId());
+ }
+ else
+ {
+ Log::warn("Skipping unload on incomplete view.");
+ }
LOOLSession::disconnect();
}
@@ -87,7 +94,7 @@ bool ChildSession::_handleInput(const char *buffer, int length)
// Client is getting active again.
// Send invalidation and other sync-up messages.
- std::unique_lock<std::recursive_mutex> lock(Mutex);
+ std::unique_lock<std::recursive_mutex> lock(Mutex); //TODO: Move to top of function?
if (_multiView)
_loKitDocument->setView(_viewId);
@@ -322,7 +329,9 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
if (_multiView)
{
_viewId = _loKitDocument->getView();
- sendTextFrame("addview: " + std::to_string(_viewId));
+ const auto viewId = std::to_string(_viewId);
+ Log::info("Created new view: " + viewId);
+ sendTextFrame("addview: " + viewId);
}
_docType = LOKitHelper::getDocumentTypeAsString(_loKitDocument->get());
@@ -1018,6 +1027,7 @@ void ChildSession::loKitCallback(const int nType, const std::string& rPayload)
break;
case LOK_CALLBACK_ERROR:
{
+ Log::error("CALLBACK_ERROR: " + rPayload);
Parser parser;
Poco::Dynamic::Var var = parser.parse(rPayload);
Object::Ptr object = var.extract<Object::Ptr>();
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 2b9117c..9e6b6d5 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -600,6 +600,7 @@ public:
void renderTile(StringTokenizer& tokens, const std::shared_ptr<Poco::Net::WebSocket>& ws)
{
+ assert(ws && "Expected a non-null websocket.");
auto tile = TileDesc::parse(tokens);
// Send back the request with all optional parameters given in the request.
@@ -655,6 +656,7 @@ public:
void renderCombinedTiles(StringTokenizer& tokens, const std::shared_ptr<Poco::Net::WebSocket>& ws)
{
+ assert(ws && "Expected a non-null websocket.");
auto tileCombined = TileCombined::parse(tokens);
auto& tiles = tileCombined.getTiles();
diff --git a/loolwsd/LibreOfficeKit.hpp b/loolwsd/LibreOfficeKit.hpp
index 4e2aab0..ff557d6 100644
--- a/loolwsd/LibreOfficeKit.hpp
+++ b/loolwsd/LibreOfficeKit.hpp
@@ -432,6 +432,7 @@ public:
{
std::unique_lock<std::mutex> lock(_mutex);
Log::trace() << "lok::Document: setView: " << nId << Log::end;
+ assert(nId >= 0 && "ViewID must be non-negative.");
_pDoc->pClass->setView(_pDoc, nId);
}
More information about the Libreoffice-commits
mailing list