]> granicus.if.org Git - icinga2/commitdiff
Make sure all threads are dead before calling fork()
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 12 Nov 2014 20:27:36 +0000 (21:27 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 12 Nov 2014 20:27:36 +0000 (21:27 +0100)
fixes #7653

lib/base/application.cpp
lib/base/application.hpp
lib/base/timer.cpp
test/test.cpp

index 786cda166854dcc918600d342af3bf09de714fdc..204ca752d1e34185ff1fae21a2dc9b8a354bc37f 100644 (file)
@@ -109,7 +109,7 @@ void Application::Exit(int rc)
                logger->Flush();
        }
 
-       UninitializeBase();
+       Timer::Uninitialize();
 
 #ifdef _DEBUG
        exit(rc);
@@ -120,8 +120,6 @@ void Application::Exit(int rc)
 
 void Application::InitializeBase(void)
 {
-       Timer::Initialize();
-
 #ifndef _WIN32
        rlimit rl;
        if (getrlimit(RLIMIT_NOFILE, &rl) >= 0) {
@@ -154,11 +152,6 @@ void Application::InitializeBase(void)
        Utility::ExecuteDeferredInitializers();
 }
 
-void Application::UninitializeBase(void)
-{
-       Timer::Uninitialize();
-}
-
 /**
  * Retrieves a pointer to the application singleton object.
  *
index 862237a72c7a4de75e93b8852b19cb5548505a98..42db856965357a99eec20906f0331d518f542f45 100644 (file)
@@ -43,7 +43,6 @@ public:
        ~Application(void);
 
        static void InitializeBase(void);
-       static void UninitializeBase(void);
 
        static Application::Ptr GetInstance(void);
 
index d07774c146215bd5461b4e7528bab94d5cdd1908..c16e41b028eae7d66a9570715007ef5faa90d35a 100644 (file)
@@ -81,7 +81,8 @@ void Timer::Uninitialize(void)
                l_CV.notify_all();
        }
 
-       l_Thread.join();
+       if (l_Thread.joinable())
+               l_Thread.join();
 }
 
 /**
index 4076eae7ef6831f5f93ce904421b6a151588396d..d4fc3d279b5e34697802a147e69f6c0f9fd6de8a 100644 (file)
@@ -21,6 +21,7 @@
 #define BOOST_TEST_MODULE icinga2_test
 
 #include "base/application.hpp"
+#include "base/timer.hpp"
 #include <BoostTestTargetConfig.h>
 
 using namespace icinga;
@@ -30,11 +31,12 @@ struct InitLibBase
        InitLibBase(void)
        {
                Application::InitializeBase();
+               Timer::Initialize();
        }
 
        ~InitLibBase(void)
        {
-               Application::UninitializeBase();
+               Timer::Uninitialize();
        }
 };