diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-04-02 21:46:41 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-04-07 16:32:07 +0800 |
| commit | 2b97b774663b44c86eb3f8029d690bbe9a433ec8 (patch) | |
| tree | 236d5351193a5aedb953429b6719d1e3967bf8df /src/renderManager.cpp | |
| parent | c356b3f6dec8a9175c0cc388ed5fd44e7fd17824 (diff) | |
fix: nullptr(SEGEV) during shutdown
Diffstat (limited to 'src/renderManager.cpp')
| -rw-r--r-- | src/renderManager.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/renderManager.cpp b/src/renderManager.cpp index c103285..84896a1 100644 --- a/src/renderManager.cpp +++ b/src/renderManager.cpp @@ -3,8 +3,10 @@ CRenderManager::CRenderManager() : screen(ftxui::ScreenInteractive::TerminalOutput()) { - if (std::atexit([]() { g_pRenderManager->exitLoop(); })) - log(ERR, "Failed to register SessionManager atexit handler, will fallback to quick_exit after hang"); + if (std::atexit([]() { + if (g_pRenderManager) g_pRenderManager->exitLoop(); + })) + log(ERR, "Failed to register RenderManager atexit handler, will fallback to quick_exit after hang"); log(LOG, "RenderManager: initialized"); }; @@ -14,8 +16,16 @@ CRenderManager::~CRenderManager() { } void CRenderManager::exitLoop() { - screen.ExitLoopClosure()(); - screen.Exit(); + if (renderer) { + try { + screen.ExitLoopClosure()(); + screen.Exit(); + } catch (const std::exception& e) { + log(WARN, "Exception in exitLoop: {}", e.what()); + } catch (...) { + log(WARN, "Unknown exception in exitLoop"); + } + } } void CRenderManager::enterLoop() { |
