kit/Kit.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
New commits: commit a86508d815013c40e3ae8c494b883e112a7195f2 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sun Mar 8 14:27:02 2020 -0400 Commit: Ashod Nakashian <ashnak...@gmail.com> CommitDate: Thu Mar 12 13:20:47 2020 +0100 wsd: kit now exits immediately when wsd send exit The 'exit' command from DocBroker to Kit is processed immediately. It set the termination flag and destroyed the Document instance in Kit. Unfortunately, this is highly problematic. There are a number of races here. Normal disconnection procedure from DocBroker is to first send 'disconnect'. This tells Kit to unload and close the view in question, and when 0 views are left, it simply exits the process. However, since 'disconnect' is processed in the message queue, the 'exit' (and indeed the socket disconnection that follows 'exit') may be handled before the message queue is drained, and so the 'disconnect' wouldn't have been processed yet. The end result of these two races is that Kit tries to exit the Core main loop, which fails a number of assertion (f.e. that no LOK Windows remain, which is presumably a leak check, which we care not about as we don't attempt to cleanup the sidebar). The fix here is to process 'exit' immediately, because DocBroker is gone, there is absolutely nothing for Kit to do anymore. Change-Id: I5c09fcfdb1713f4e0b56b717c747d919d0c6728f Reviewed-on: https://gerrit.libreoffice.org/c/online/+/90356 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/kit/Kit.cpp b/kit/Kit.cpp index 54ad81647..496514e46 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -2151,9 +2151,9 @@ protected: } else if (tokens.equals(0, "exit")) { - LOG_INF("Setting TerminationFlag due to 'exit' command from parent."); - SigUtil::setTerminationFlag(); - document.reset(); + LOG_INF("Terminating immediately due to parent 'exit' command."); + Log::shutdown(); + std::_Exit(EX_SOFTWARE); } else if (tokens.equals(0, "tile") || tokens.equals(0, "tilecombine") || tokens.equals(0, "canceltiles") || tokens.equals(0, "paintwindow") || tokens.equals(0, "resizewindow") || _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits