[Libreoffice-commits] online.git: wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Thu Apr 6 17:59:10 UTC 2017


 wsd/DocumentBroker.cpp |   10 +++++++---
 wsd/DocumentBroker.hpp |    6 +++---
 2 files changed, 10 insertions(+), 6 deletions(-)

New commits:
commit 1e1f23716c9ee3ce880d1d927945386cf5400293
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Thu Apr 6 13:49:44 2017 -0400

    wsd: don't take reference to session member being destroyed
    
    Change-Id: I0074f4557018feb47a7a2a95a3fca238407a0023
    Reviewed-on: https://gerrit.libreoffice.org/36227
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 9550dfd2..eb53f195 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -516,7 +516,7 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s
     return true;
 }
 
-bool DocumentBroker::saveToStorage(const std::string& sessionId,
+bool DocumentBroker::saveToStorage(const std::string sessionId,
                                    bool success, const std::string& result)
 {
     assertCorrectThread();
@@ -817,7 +817,7 @@ size_t DocumentBroker::addSession(const std::shared_ptr<ClientSession>& session)
     return count;
 }
 
-size_t DocumentBroker::removeSession(const std::string& id, bool destroyIfLast)
+size_t DocumentBroker::removeSession(const std::string id, bool destroyIfLast)
 {
     assertCorrectThread();
 
@@ -840,7 +840,7 @@ size_t DocumentBroker::removeSession(const std::string& id, bool destroyIfLast)
     return _sessions.size();
 }
 
-size_t DocumentBroker::removeSessionInternal(const std::string& id)
+size_t DocumentBroker::removeSessionInternal(const std::string id)
 {
     assertCorrectThread();
     try
@@ -853,6 +853,10 @@ size_t DocumentBroker::removeSessionInternal(const std::string& id)
             LOOLWSD::dumpEndSessionTrace(getJailId(), id, _uriOrig);
 
             const auto readonly = (it->second ? it->second->isReadOnly() : false);
+
+            //FIXME: We might be called from the session we are removing,
+            //FIXME: and if this is the last/only reference, we destroy it.
+            //FIXME: Should flag and remove from the poll thread.
             _sessions.erase(it);
 
             const auto count = _sessions.size();
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index c8758ba9..88fa2b6e 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -233,7 +233,7 @@ public:
     void setLoaded();
 
     /// Save the document to Storage if it needs persisting.
-    bool saveToStorage(const std::string& sesionId, bool success, const std::string& result = "");
+    bool saveToStorage(const std::string sesionId, bool success, const std::string& result = "");
     bool isModified() const { return _isModified; }
     void setModified(const bool value);
 
@@ -265,7 +265,7 @@ public:
     size_t addSession(const std::shared_ptr<ClientSession>& session);
 
     /// Removes a session by ID. Returns the new number of sessions.
-    size_t removeSession(const std::string& id, bool destroyIfLast = false);
+    size_t removeSession(const std::string id, bool destroyIfLast = false);
 
     /// Add a callback to be invoked in our polling thread.
     void addCallback(SocketPoll::CallbackFn fn);
@@ -342,7 +342,7 @@ private:
     bool saveToStorageInternal(const std::string& sesionId, bool success, const std::string& result = "");
 
     /// Removes a session by ID. Returns the new number of sessions.
-    size_t removeSessionInternal(const std::string& id);
+    size_t removeSessionInternal(const std::string id);
 
     /// Forward a message from child session to its respective client session.
     bool forwardToClient(const std::shared_ptr<Message>& payload);


More information about the Libreoffice-commits mailing list