[Libreoffice-commits] online.git: common/SigUtil.cpp common/SigUtil.hpp kit/Kit.cpp

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Tue Aug 13 07:08:51 UTC 2019


 common/SigUtil.cpp |    5 +++++
 common/SigUtil.hpp |    8 ++++----
 kit/Kit.cpp        |    2 +-
 3 files changed, 10 insertions(+), 5 deletions(-)

New commits:
commit 9a7768b420207d5dec319a068a27f03bbef6052a
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Tue Aug 13 09:08:16 2019 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Aug 13 09:08:32 2019 +0200

    common: wrap SigHandlerTrap in a getter function to avoid ODR violation
    
    Otherwise both loolwsd and unit-copy-paste.so would have a
    SigHandlerTrap:
    
    ==26186==ERROR: AddressSanitizer: odr-violation (0x000002090ae0):
      [1] size=40 'SigHandlerTrap' ../common/SigUtil.cpp:76:12
      [2] size=40 'SigHandlerTrap' common/SigUtil.cpp:76:12
    These globals were registered at these points:
      [1]:
        #0 0x5f9a28 in __asan_register_globals.part.13 /home/vmiklos/git/libreoffice/lode/packages/llvm-472c6ef8b0f53061b049039f9775ab127beafbe4.src/compiler-rt/lib/asan/asan_globals.cc:365
        #1 0x7f8f537f1d8b in asan.module_ctor (/home/vmiklos/git/libreoffice/online-san/test/../test/.libs/unit-copy-paste.so+0x60ad8b)
    
      [2]:
        #0 0x5f9a28 in __asan_register_globals.part.13 /home/vmiklos/git/libreoffice/lode/packages/llvm-472c6ef8b0f53061b049039f9775ab127beafbe4.src/compiler-rt/lib/asan/asan_globals.cc:365
        #1 0xe2bcfe in asan.module_ctor (/home/vmiklos/git/libreoffice/online-san/loolwsd+0xe2bcfe)
    
    Change-Id: I54d5f6d4298848cacd437d302cff0e8c5003fb8c

diff --git a/common/SigUtil.cpp b/common/SigUtil.cpp
index 61111b867..933ad7f3e 100644
--- a/common/SigUtil.cpp
+++ b/common/SigUtil.cpp
@@ -77,6 +77,11 @@ std::mutex SigHandlerTrap;
 
 namespace SigUtil
 {
+    std::mutex& getSigHandlerTrap()
+    {
+        return SigHandlerTrap;
+    }
+
     const char *signalName(const int signo)
     {
         switch (signo)
diff --git a/common/SigUtil.hpp b/common/SigUtil.hpp
index 9a366dc6d..723dd2e5e 100644
--- a/common/SigUtil.hpp
+++ b/common/SigUtil.hpp
@@ -43,12 +43,12 @@ extern std::atomic<bool> MobileTerminationFlag;
 
 #if !MOBILEAPP
 
-/// Mutex to trap signal handler, if any,
-/// and prevent _Exit while collecting backtrace.
-extern std::mutex SigHandlerTrap;
-
 namespace SigUtil
 {
+    /// Mutex to trap signal handler, if any,
+    /// and prevent _Exit while collecting backtrace.
+    std::mutex& getSigHandlerTrap();
+
     /// Returns the name of the signal.
     const char* signalName(int signo);
 
diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index 6f5bda553..42962fe41 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -2768,7 +2768,7 @@ void lokit_main(
     // to prevent exiting.
     LOG_INF("Process finished.");
     Log::shutdown();
-    std::unique_lock<std::mutex> lock(SigHandlerTrap);
+    std::unique_lock<std::mutex> lock(SigUtil::getSigHandlerTrap());
     std::_Exit(Application::EXIT_OK);
 
 #endif


More information about the Libreoffice-commits mailing list