fix in async_sink not to throw in destrcutor in case join failed

This commit is contained in:
gabi 2014-11-07 09:43:28 +02:00
parent 35c71f4d7b
commit 4fb55903fa

View File

@ -69,7 +69,7 @@ private:
q_type _q;
std::thread _back_thread;
//Clear all remaining messages(if any), stop the _back_thread and join it
void _shutdown();
void _join() ;
std::mutex _mutex;
};
}
@ -87,7 +87,7 @@ inline spdlog::sinks::async_sink::async_sink(const q_type::size_type max_queue_s
inline spdlog::sinks::async_sink::~async_sink()
{
_shutdown();
_join();
}
inline void spdlog::sinks::async_sink::_sink_it(const details::log_msg& msg)
@ -105,11 +105,11 @@ inline void spdlog::sinks::async_sink::_thread_loop()
q_type::item_type msg;
if (_q.pop(msg, pop_timeout))
{
if (!_active)
return;
for (auto &s : _sinks)
{
s->log(msg);
if(!_active)
break;
}
}
}
@ -145,20 +145,26 @@ inline void spdlog::sinks::async_sink::shutdown(const std::chrono::milliseconds&
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
}
_shutdown();
_join();
}
inline void spdlog::sinks::async_sink::_shutdown()
inline void spdlog::sinks::async_sink::_join()
{
std::lock_guard<std::mutex> guard(_mutex);
if(_active)
{
_active = false;
if (_back_thread.joinable())
{
try
{
_back_thread.join();
}
catch (const std::system_error&) //Dont crush if thread not joinable
{
}
}
}