[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-2-1' - wsd/DocumentBroker.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Apr 24 17:43:18 UTC 2017
wsd/DocumentBroker.cpp | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
New commits:
commit 39bdf75907b4340e03fb14556a704ba15a0bf627
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Fri Apr 21 00:00:51 2017 -0400
wsd: stop the DocBroker when saving session is last
Change-Id: Iad72aeea56ab8ba64eb72e18b861b3cf67224d08
Reviewed-on: https://gerrit.libreoffice.org/36768
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
Tested-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 461fd045..bb96bea9 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -562,16 +562,14 @@ bool DocumentBroker::saveToStorage(const std::string& sessionId,
const bool res = saveToStorageInternal(sessionId, success, result);
- // If marked to destroy, then this was the last session.
- // FIXME: If during that last save another client connects
- // to this doc, the _markToDestroy will be reset and we
- // will leak the last session. Need to mark the session as
- // dead and cleanup somehow.
- if (_markToDestroy)
- {
- // We've saved and can safely destroy.
+ // If marked to destroy, or session is disconnected, remove.
+ const auto it = _sessions.find(sessionId);
+ if (_markToDestroy || (it != _sessions.end() && it->second->isCloseFrame()))
removeSessionInternal(sessionId);
+ // If marked to destroy, then this was the last session.
+ if (_markToDestroy || _sessions.empty())
+ {
// Stop so we get cleaned up and removed.
_stop = true;
}
@@ -866,7 +864,8 @@ size_t DocumentBroker::removeSession(const std::string& id, bool destroyIfLast)
try
{
LOG_INF("Removing session [" << id << "] on docKey [" << _docKey <<
- "]. Have " << _sessions.size() << " sessions.");
+ "]. Have " << _sessions.size() << " sessions. markToDestroy: " << _markToDestroy <<
+ ", LastEditableSession: " << _lastEditableSession);
if (!_lastEditableSession || !autoSave(true))
return removeSessionInternal(id);
@@ -1231,7 +1230,8 @@ void DocumentBroker::destroyIfLastEditor(const std::string& id)
// Last view going away, can destroy.
_markToDestroy = (_sessions.size() <= 1);
LOG_DBG("startDestroy on session [" << id << "] on docKey [" << _docKey <<
- "], markToDestroy: " << _markToDestroy << ", lastEditableSession: " << _lastEditableSession);
+ "], sessions: " << _sessions.size() << " markToDestroy: " << _markToDestroy <<
+ ", lastEditableSession: " << _lastEditableSession);
}
void DocumentBroker::setModified(const bool value)
More information about the Libreoffice-commits
mailing list