kit/Kit.cpp | 52 ++++++++++++++++++++++++++++++++----------------- test/httpwstest.cpp | 5 +++- wsd/DocumentBroker.cpp | 2 - 3 files changed, 39 insertions(+), 20 deletions(-)
New commits: commit 6bcd793a8b2179e36b11cdadac3541dccd7628ea Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Wed Jan 11 17:03:52 2017 -0500 wsd: don't exit Kit process when new sessions exist When a new session is created in Kit, it means a new view is about to be created. However if in the interim the last session closes and view is destroyed, Kit should not exit. Instead, we unload the document and prepare to reload it again. Change-Id: Idbc3a663b4d6921440736499f2d439fc2b7e33dc Reviewed-on: https://gerrit.libreoffice.org/33115 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/kit/Kit.cpp b/kit/Kit.cpp index 1c30f2c..13bea18 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -940,15 +940,9 @@ private: _loKitDocument->setView(viewId); _loKitDocument->registerCallback(nullptr, nullptr); - _loKitDocument->destroyView(viewId); - _viewIdToCallbackDescr.erase(viewId); - const int viewCount = _loKitDocument->getViewsCount(); - LOG_INF("Document [" << _url << "] session [" << - sessionId << "] unloaded view [" << viewId << "]. Have " << - viewCount << " view" << (viewCount != 1 ? "s." : ".")); - - if (viewCount <= 0) + int viewCount = _loKitDocument->getViewsCount(); + if (viewCount == 1) { std::unique_lock<std::mutex> lock(_mutex); if (_sessions.empty()) @@ -957,17 +951,35 @@ private: std::_Exit(Application::EXIT_OK); } + LOG_INF("Document [" << _url << "] has no more views, but has " << + _sessions.size() << " sessions still. Destroying the document."); + _loKitDocument.reset(); + LOG_INF("Document [" << _url << "] session [" << sessionId << "] unloaded Document."); return; } + else + { + _loKitDocument->destroyView(viewId); + } - // Get the list of view ids from the core - std::vector<int> viewIds(viewCount); - _loKitDocument->getViewIds(viewIds.data(), viewCount); + _viewIdToCallbackDescr.erase(viewId); - lockLokDoc.unlock(); + viewCount = _loKitDocument->getViewsCount(); + LOG_INF("Document [" << _url << "] session [" << + sessionId << "] unloaded view [" << viewId << "]. Have " << + viewCount << " view" << (viewCount != 1 ? "s." : ".")); - // Broadcast updated view info - notifyViewInfo(viewIds); + if (viewCount > 0) + { + // Get the list of view ids from the core + std::vector<int> viewIds(viewCount); + _loKitDocument->getViewIds(viewIds.data(), viewCount); + + lockLokDoc.unlock(); + + // Broadcast updated view info + notifyViewInfo(viewIds); + } } std::map<int, UserInfo> getViewInfo() override @@ -1389,9 +1401,9 @@ private: if (!isFound) { - LOG_WRN("Document::ViewCallback. The message [" << viewId << - "] [" << LOKitHelper::kitCallbackTypeToString(type) << - "] [" << payload << "] is not sent to Master Session."); + LOG_WRN("Document::ViewCallback. Session [" << viewId << + "] is no longer active to process [" << LOKitHelper::kitCallbackTypeToString(type) << + "] [" << payload << "] message to Master Session."); } } else commit 0e5a75c46b9533fab5e600e2cab04ddca43dff10 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Jan 9 21:35:47 2017 -0500 wsd: exit the kit only when no more sessions exist Change-Id: I26cd8876fd564f537dac4fb1748aee5b4dbdff04 Reviewed-on: https://gerrit.libreoffice.org/33114 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/kit/Kit.cpp b/kit/Kit.cpp index 526aaa2..1c30f2c 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -950,8 +950,14 @@ private: if (viewCount <= 0) { - LOG_INF("Document [" << _url << "] has no more views, exiting bluntly."); - std::_Exit(Application::EXIT_OK); + std::unique_lock<std::mutex> lock(_mutex); + if (_sessions.empty()) + { + LOG_INF("Document [" << _url << "] has no more views, exiting bluntly."); + std::_Exit(Application::EXIT_OK); + } + + return; } // Get the list of view ids from the core diff --git a/test/httpwstest.cpp b/test/httpwstest.cpp index c64cc9c..32635d1 100644 --- a/test/httpwstest.cpp +++ b/test/httpwstest.cpp @@ -571,11 +571,14 @@ void HTTPWSTest::testBadLoad() void HTTPWSTest::testReload() { + auto const testname = "reload "; + std::string documentPath, documentURL; getDocumentPathAndURL("hello.odt", documentPath, documentURL); for (auto i = 0; i < 3; ++i) { - loadDoc(documentURL, "reload "); + std::cerr << testname << "loading #" << (i+1) << std::endl; + loadDoc(documentURL, testname); } } diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index e8c08a7..cb20b14 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -633,8 +633,6 @@ size_t DocumentBroker::addSession(std::shared_ptr<ClientSession>& session) const auto count = _sessions.size(); - lock.unlock(); - // Request a new session from the child kit. _childProcess->sendTextFrame(aMessage); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits