libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument
欲使用_Garbo在程序退出的时候自动回收new出来的对象:
// g3log.h
class g3log{
// ...
private:
g2::DefaultFileLogger *_logger;
static Garbo _Garbo;
};
// g3log.cpp
g3log::~g3log(){
delete _logger, _logger = nullptr;
}
g3log::Garbo::~Garbo(){
LOG(GINFO, "g3log::Garbo::~Garbo");
delete g3log::_Instance, g3log::_Instance = nullptr;
}
但DefaultFileLogger中的成员变量
std::unique_ptr<LogWorker> worker;
,其LogWorker的析构函数,调用的如下函数:
void shutDownLogging() {
std::lock_guard<std::mutex> lock(g_logging_init_mutex);
g_logger_instance = nullptr;
}
因g_logging_init_mutex为全局对象,不能保证在_Garbo析构的时候,g_logging_init_mutex还未释放,所以造成_Garbo析构的时候执行std::lock_guard<std::mutex> lock(g_logging_init_mutex);直接崩溃的情况.
将g_logging_init_mutex修改为g3log的成员变量(非静态).