[Libreoffice-commits] online.git: loolwsd/ChildProcessSession.cpp loolwsd/ChildProcessSession.hpp loolwsd/LOOLKit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Sun Jan 10 20:08:50 PST 2016
loolwsd/ChildProcessSession.cpp | 7 +++++--
loolwsd/ChildProcessSession.hpp | 4 ++--
loolwsd/LOOLKit.cpp | 26 ++++++++++++++++++++------
3 files changed, 27 insertions(+), 10 deletions(-)
New commits:
commit 96c7fdd0f8427f70d9ab04128a5c667868bd0bdb
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun Jan 10 10:33:58 2016 -0500
loolwsd: onUnload takes Session ID
Change-Id: I63dd21441a11981f09f6b4c2d36560094fc81f1f
Reviewed-on: https://gerrit.libreoffice.org/21327
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/ChildProcessSession.cpp b/loolwsd/ChildProcessSession.cpp
index 4fa08a9..9424769 100644
--- a/loolwsd/ChildProcessSession.cpp
+++ b/loolwsd/ChildProcessSession.cpp
@@ -46,7 +46,7 @@ ChildProcessSession::ChildProcessSession(const std::string& id,
LibreOfficeKitDocument * loKitDocument,
const std::string& jailId,
std::function<LibreOfficeKitDocument*(const std::string&, const std::string&)> onLoad,
- std::function<void(int)> onUnload) :
+ std::function<void(const std::string&)> onUnload) :
LOOLSession(id, Kind::ToMaster, ws),
_loKitDocument(loKitDocument),
_multiView(getenv("LOK_VIEW_CALLBACK")),
@@ -66,7 +66,10 @@ ChildProcessSession::~ChildProcessSession()
Poco::Mutex::ScopedLock lock(_mutex);
- _onUnload(_viewId);
+ if (_multiView)
+ _loKitDocument->pClass->setView(_loKitDocument, _viewId);
+
+ _onUnload(getId());
}
bool ChildProcessSession::_handleInput(const char *buffer, int length)
diff --git a/loolwsd/ChildProcessSession.hpp b/loolwsd/ChildProcessSession.hpp
index 9b5dcfa..4313d81 100644
--- a/loolwsd/ChildProcessSession.hpp
+++ b/loolwsd/ChildProcessSession.hpp
@@ -35,7 +35,7 @@ public:
LibreOfficeKitDocument * loKitDocument,
const std::string& jailId,
std::function<LibreOfficeKitDocument*(const std::string&, const std::string&)> onLoad,
- std::function<void(int)> onUnload);
+ std::function<void(const std::string&)> onUnload);
virtual ~ChildProcessSession();
virtual bool getStatus(const char *buffer, int length) override;
@@ -88,7 +88,7 @@ private:
int _viewId;
int _clientPart;
std::function<LibreOfficeKitDocument*(const std::string&, const std::string&)> _onLoad;
- std::function<void(int)> _onUnload;
+ std::function<void(const std::string&)> _onUnload;
};
#endif
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 0dc3fd6..35fc483 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -317,7 +317,7 @@ public:
Connection(LibreOfficeKit *loKit, LibreOfficeKitDocument *loKitDocument,
const std::string& jailId, const std::string& sessionId,
std::function<LibreOfficeKitDocument*(const std::string&, const std::string&)> onLoad,
- std::function<void(int)> onUnload) :
+ std::function<void(const std::string&)> onUnload) :
_loKit(loKit),
_loKitDocument(loKitDocument),
_jailId(jailId),
@@ -452,7 +452,7 @@ private:
std::shared_ptr<ChildProcessSession> _session;
volatile bool _stop;
std::function<LibreOfficeKitDocument*(const std::string&, const std::string&)> _onLoad;
- std::function<void(int)> _onUnload;
+ std::function<void(const std::string&)> _onUnload;
std::shared_ptr<WebSocket> _ws;
};
@@ -552,7 +552,7 @@ public:
auto thread = std::make_shared<Connection>(_loKit, _loKitDocument, _jailId, sessionId,
[this](const std::string& id, const std::string& uri) { return onLoad(id, uri); },
- [this](const int viewId) { onUnload(viewId); });
+ [this](const std::string& id) { onUnload(id); });
const auto aInserted = _connections.emplace(intSessionId, thread);
@@ -657,16 +657,30 @@ private:
return _loKitDocument;
}
- void onUnload(const int viewId)
+ void onUnload(const std::string& sessionId)
{
+ std::unique_lock<std::mutex> lock(_mutex);
+
+ Log::info("Session " + sessionId + " is unloading. " + std::to_string(_clientViews - 1) + " views left.");
+
+ const unsigned intSessionId = Util::decodeId(sessionId);
+ const auto it = _connections.find(intSessionId);
+ if (it == _connections.end() || !it->second)
+ {
+ Log::error("Cannot find session [" + sessionId + "] which decoded to " + std::to_string(intSessionId));
+ return;
+ }
+
+ --_clientViews;
+
if (_multiView && _loKitDocument)
{
--_clientViews;
Log::info() << "Document [" << _url << "] view ["
- << viewId << "] unloaded, leaving "
+ << sessionId << "] unloaded, leaving "
<< _clientViews << " views." << Log::end;
- _loKitDocument->pClass->setView(_loKitDocument, viewId);
+ const auto viewId = _loKitDocument->pClass->getView(_loKitDocument);
_loKitDocument->pClass->registerCallback(_loKitDocument, nullptr, nullptr);
_loKitDocument->pClass->destroyView(_loKitDocument, viewId);
}
More information about the Libreoffice-commits
mailing list