Commit 014bcddb authored by Pavel Vainerman's avatar Pavel Vainerman

(UActivator): вернул паузу при завершении работы

parent 49fe026e
...@@ -113,7 +113,7 @@ static std::shared_ptr<std::thread> g_term_thread; ...@@ -113,7 +113,7 @@ static std::shared_ptr<std::thread> g_term_thread;
static std::shared_ptr<std::thread> g_fini_thread; static std::shared_ptr<std::thread> g_fini_thread;
static std::shared_ptr<std::thread> g_kill_thread; static std::shared_ptr<std::thread> g_kill_thread;
static const int TERMINATE_TIMEOUT_SEC = 3; // время отведенное на завершение процесса [сек] static const int TERMINATE_TIMEOUT_SEC = 3; // время отведенное на завершение процесса [сек]
static const int THREAD_TERMINATE_PAUSE = 500; // [мсек] пауза при завершении потока (см. work()) static const int THREAD_TERMINATE_PAUSE = 50; // [мсек] пауза при завершении потока (см. work())
static const int KILL_TIMEOUT_SEC = 8; static const int KILL_TIMEOUT_SEC = 8;
static pid_t g_stacktrace_proc_pid = 0; // pid процесса делающего stack trace (для защиты от зависания) static pid_t g_stacktrace_proc_pid = 0; // pid процесса делающего stack trace (для защиты от зависания)
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -495,7 +495,7 @@ namespace uniset ...@@ -495,7 +495,7 @@ namespace uniset
} }
} }
g_act = nullptr; // g_act = nullptr;
UniSetActivator::set_signals(false); UniSetActivator::set_signals(false);
} }
...@@ -508,6 +508,7 @@ namespace uniset ...@@ -508,6 +508,7 @@ namespace uniset
g_kill_thread->join(); g_kill_thread->join();
ulogsys << "(TERMINATE THREAD): ..bye.." << endl; ulogsys << "(TERMINATE THREAD): ..bye.." << endl;
} }
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
...@@ -775,7 +776,15 @@ void UniSetActivator::work() ...@@ -775,7 +776,15 @@ void UniSetActivator::work()
g_finievent.notify_one(); g_finievent.notify_one();
if( orbthr ) if( orbthr )
{
// почему-то без этой паузы при завершении возникает "double free or corruption"
// и вообще какой-то race между завершением штатным и нашим
// видимо потому-что обычно activator запускается в main()
// и как только этот поток прерывается идёт завершение работы
// а мы и так уже завершаемся.. и получается какой-то race..
msleep(THREAD_TERMINATE_PAUSE);
wait_done(); wait_done();
}
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
CORBA::ORB_ptr UniSetActivator::getORB() CORBA::ORB_ptr UniSetActivator::getORB()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment