Fix(logger): preserve queued logs on shutdown; record exit signal
This commit is contained in:
@@ -604,9 +604,13 @@ static void fillLoginInfo(LOGIN_INFOR& info)
|
||||
|
||||
// ============== Signal Handling ==============
|
||||
|
||||
// 注意:signal handler 内不能调 NSLog/Mprintf(NSLog 走 Foundation 锁,
|
||||
// Mprintf 走 Logger mutex/condvar),都不是 async-signal-safe。只在这里
|
||||
// 记 sig_atomic_t 标志位,main 退出循环后再补一行日志。
|
||||
static volatile sig_atomic_t g_lastSignal = 0;
|
||||
static void signalHandler(int sig)
|
||||
{
|
||||
NSLog(@"Received signal %d, shutting down...", sig);
|
||||
g_lastSignal = sig;
|
||||
g_running = false;
|
||||
g_bExit = S_CLIENT_EXIT; // 通知所有工作线程退出
|
||||
}
|
||||
@@ -934,6 +938,14 @@ int main(int argc, const char* argv[])
|
||||
}
|
||||
}
|
||||
|
||||
// 退出原因留痕:signal handler 不能直接打日志,在这里补一行。
|
||||
if (g_lastSignal != 0) {
|
||||
Mprintf(">>> Exit by signal %d (g_bExit=%d)\n",
|
||||
(int)g_lastSignal, (int)g_bExit);
|
||||
} else {
|
||||
Mprintf(">>> Exit normally (g_bExit=%d)\n", (int)g_bExit);
|
||||
}
|
||||
|
||||
NSLog(@"Shutting down...");
|
||||
|
||||
// Release power assertions
|
||||
@@ -944,6 +956,10 @@ int main(int argc, const char* argv[])
|
||||
// Display assertion is managed by ScreenHandler (released in stop())
|
||||
// powerActivity is automatically released when exiting @autoreleasepool
|
||||
(void)powerActivity; // Suppress unused variable warning
|
||||
|
||||
// 显式停止日志,确保上面 Mprintf 的退出原因落盘。
|
||||
// 不依赖 ~Logger() 的静态析构次序,避免后续新增日志相关静态对象时踩坑。
|
||||
Logger::getInstance().stop();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user