common/SigUtil.cpp |   17 +++++++++--------
 common/SigUtil.hpp |    9 ++++-----
 kit/ForKit.cpp     |   31 +++++++++++++++++++++++++++++++
 wsd/LOOLWSD.cpp    |    8 +-------
 4 files changed, 45 insertions(+), 20 deletions(-)

New commits:
commit 6ca6a7649eff18e3e48bfe97c3cafcf41fb16363
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Tue Jul 14 15:20:05 2020 +0100
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Tue Jul 14 17:28:32 2020 +0200

    Forkit: add dump_forkit_state and re-factor state checks to simplify.
    
    Change-Id: Ic65bbd0894f26f69e1b55c769ac47013f9aaf163
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98746
    Tested-by: Jenkins
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>

diff --git a/common/SigUtil.cpp b/common/SigUtil.cpp
index 2bc3d5aa7..f768005c6 100644
--- a/common/SigUtil.cpp
+++ b/common/SigUtil.cpp
@@ -66,17 +66,18 @@ namespace SigUtil
     }
 #endif
 
-#if !MOBILEAPP
-    bool getDumpGlobalState()
+    void checkDumpGlobalState(GlobalDumpStateFn dumpState)
     {
-        return DumpGlobalState;
-    }
-
-    void resetDumpGlobalState()
-    {
-        DumpGlobalState = false;
+#if !MOBILEAPP
+        if (DumpGlobalState)
+        {
+            dumpState();
+            DumpGlobalState = false;
+        }
+#endif
     }
 
+#if !MOBILEAPP
     /// This traps the signal-handler so we don't _Exit
     /// while dumping stack trace. It's re-entrant.
     /// Used to safely increment and decrement the signal-handler trap.
diff --git a/common/SigUtil.hpp b/common/SigUtil.hpp
index 9cc5b69d4..9f8296426 100644
--- a/common/SigUtil.hpp
+++ b/common/SigUtil.hpp
@@ -46,12 +46,11 @@ namespace SigUtil
     }
 #endif
 
-#if !MOBILEAPP
-    /// Get the flag to dump internal state.
-    bool getDumpGlobalState();
-    /// Reset the flag to dump internal state.
-    void resetDumpGlobalState();
+    extern "C" { typedef void (*GlobalDumpStateFn)(void); }
+
+    void checkDumpGlobalState(GlobalDumpStateFn dumpState);
 
+#if !MOBILEAPP
     /// Wait for the signal handler, if any,
     /// and prevent _Exit while collecting backtrace.
     void waitSigHandlerTrap();
diff --git a/kit/ForKit.cpp b/kit/ForKit.cpp
index 721670bd1..9daa93576 100644
--- a/kit/ForKit.cpp
+++ b/kit/ForKit.cpp
@@ -67,6 +67,33 @@ int ClientPortNumber = DEFAULT_CLIENT_PORT_NUMBER;
 std::string MasterLocation;
 #endif
 
+extern "C" { void dump_forkit_state(void); /* easy for gdb */ }
+
+#if !MOBILEAPP
+void dump_forkit_state()
+{
+    std::ostringstream oss;
+
+    oss << "Forkit: " << ForkCounter << " forks\n"
+        << "  loglevel: " << LogLevel << "\n"
+        << "  unit test: " << UnitTestLibrary << "\n"
+#ifndef KIT_IN_PROCESS
+        << "  NoCapsForKit: " << NoCapsForKit << "\n"
+        << "  NoSeccomp: " << NoSeccomp << "\n"
+#  if ENABLE_DEBUG
+        << "  SingleKit: " << SingleKit << "\n"
+#  endif
+#endif
+        << "  ClientPortNumber: " << ClientPortNumber << "\n"
+        << "  MasterLocation: " << MasterLocation
+        << "\n";
+
+    const std::string msg = oss.str();
+    fprintf(stderr, "%s", msg.c_str());
+    LOG_TRC(msg);
+}
+#endif
+
 class ServerWSHandler;
 
 // We have a single thread and a single connection so we won't bother with
@@ -627,6 +654,8 @@ int main(int argc, char** argv)
     mainPoll.insertNewUnixSocket(MasterLocation, FORKIT_URI, WSHandler);
 #endif
 
+    SigUtil::setUserSignals();
+
     LOG_INF("ForKit process is ready.");
 
     while (!SigUtil::getTerminationFlag())
@@ -635,6 +664,8 @@ int main(int argc, char** argv)
 
         mainPoll.poll(POLL_TIMEOUT_MICRO_S);
 
+        SigUtil::checkDumpGlobalState(dump_forkit_state);
+
 #if ENABLE_DEBUG
         if (!SingleKit)
 #endif
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 9815e4158..cef10cc11 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -3599,13 +3599,7 @@ private:
 
         void wakeupHook() override
         {
-#if !MOBILEAPP
-            if (SigUtil::getDumpGlobalState())
-            {
-                dump_state();
-                SigUtil::resetDumpGlobalState();
-            }
-#endif
+            SigUtil::checkDumpGlobalState(dump_state);
         }
     };
     /// This thread & poll accepts incoming connections.
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to