wsd/LOOLWSD.cpp |   21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

New commits:
commit 38f955b5c54ada780afec69ed16e286989c1c17e
Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk>
Date:   Wed Apr 5 00:25:15 2017 -0400

    wsd: start DocBroker thread before adding callbacks
    
    And move more into the callback to ensure
    thread affinity.
    
    Change-Id: I1d6985716d0d36aa488b65263ecb41f444f77255
    Reviewed-on: https://gerrit.libreoffice.org/36115
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 367395cf..f2f6d0df 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -1856,15 +1856,19 @@ private:
                     auto clientSession = createNewClientSession(nullptr, _id, 
uriPublic, docBroker, isReadOnly);
                     if (clientSession)
                     {
-                        clientSession->setSaveAsSocket(socket);
-
                         // Transfer the client socket to the DocumentBroker.
-                        // Move the socket into DocBroker.
-                        docBroker->addSocketToPoll(socket);
                         socketOwnership = 
SocketHandlerInterface::SocketOwnership::MOVED;
 
-                        docBroker->addCallback([&, clientSession]()
+                        // Make sure the thread is running before adding 
callback.
+                        docBroker->startThread();
+
+                        docBroker->addCallback([docBroker, socket, 
clientSession, format]()
                         {
+                            clientSession->setSaveAsSocket(socket);
+
+                            // Move the socket into DocBroker.
+                            docBroker->addSocketToPoll(socket);
+
                             // First add and load the session.
                             docBroker->addSession(clientSession);
 
@@ -1888,8 +1892,6 @@ private:
                             clientSession->handleMessage(true, 
WebSocketHandler::WSOpCode::Text, saveasRequest);
                         });
 
-                        docBroker->startThread();
-
                         sent = true;
                     }
                     else
@@ -2083,6 +2085,9 @@ private:
                 // Remove from current poll as we're moving ownership.
                 socketOwnership = 
SocketHandlerInterface::SocketOwnership::MOVED;
 
+                // Make sure the thread is running before adding callback.
+                docBroker->startThread();
+
                 docBroker->addCallback([docBroker, socket, clientSession]()
                 {
                     // Set the ClientSession to handle Socket events.
@@ -2095,8 +2100,6 @@ private:
                     // Add and load the session.
                     docBroker->addSession(clientSession);
                 });
-
-                docBroker->startThread();
             }
             else
             {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to