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

Ashod Nakashian ashod.nakashian at collabora.co.uk
Sun Oct 16 22:05:55 UTC 2016


 loolwsd/DocumentBroker.hpp |   29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

New commits:
commit 35fcaa1592b5a78bd46f326271a27b1710c0731b
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Fri Oct 14 08:37:43 2016 -0400

    loolwsd: don't join unjoinable thread and contain exceptions
    
    Change-Id: I309153c3c05a152e4ef3bbbbd5a0948bcc589c9c
    Reviewed-on: https://gerrit.libreoffice.org/29939
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/loolwsd/DocumentBroker.hpp b/loolwsd/DocumentBroker.hpp
index 6891507..00d27e2 100644
--- a/loolwsd/DocumentBroker.hpp
+++ b/loolwsd/DocumentBroker.hpp
@@ -70,19 +70,30 @@ public:
 
     void close(const bool rude)
     {
-        _stop = true;
-        IoUtil::shutdownWebSocket(_ws);
-        _thread.join();
-        _ws.reset();
-        if (_pid != -1)
+        try
         {
-            Log::info("Closing child [" + std::to_string(_pid) + "].");
-            if (rude && kill(_pid, SIGINT) != 0 && kill(_pid, 0) != 0)
+            _stop = true;
+            IoUtil::shutdownWebSocket(_ws);
+            if (_thread.joinable())
             {
-                Log::syserror("Cannot terminate lokit [" + std::to_string(_pid) + "]. Abandoning.");
+                _thread.join();
             }
 
-           _pid = -1;
+            _ws.reset();
+            if (_pid != -1)
+            {
+                Log::info("Closing child [" + std::to_string(_pid) + "].");
+                if (rude && kill(_pid, SIGINT) != 0 && kill(_pid, 0) != 0)
+                {
+                    Log::syserror("Cannot terminate lokit [" + std::to_string(_pid) + "]. Abandoning.");
+                }
+
+               _pid = -1;
+            }
+        }
+        catch (const std::exception& ex)
+        {
+            Log::error("Eror while closing child process: " + std::string(ex.what()));
         }
     }
 


More information about the Libreoffice-commits mailing list