From 3b9dd5fbad9084c6694fb9bf6dbb5c84fabf2e06 Mon Sep 17 00:00:00 2001 From: Sean1840 <617225691@qq.com> Date: Thu, 4 Sep 2025 11:33:35 +0800 Subject: [PATCH] rectification of safety issues --- msmonitor/dynolog_npu/dynolog/src/Main.cpp | 9 +++++---- msmonitor/plugin/ipc_monitor/utils.cpp | 17 +++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/msmonitor/dynolog_npu/dynolog/src/Main.cpp b/msmonitor/dynolog_npu/dynolog/src/Main.cpp index a24bb802a..89c263947 100644 --- a/msmonitor/dynolog_npu/dynolog/src/Main.cpp +++ b/msmonitor/dynolog_npu/dynolog/src/Main.cpp @@ -182,7 +182,7 @@ int main(int argc, char** argv) std::shared_ptr dcgm; - std::unique_ptr ipcmon; + std::shared_ptr ipcmon; std::unique_ptr ipcmon_thread; std::unique_ptr data_ipcmon_thread; std::unique_ptr gpumon_thread; @@ -190,12 +190,12 @@ int main(int argc, char** argv) if (FLAGS_enable_ipc_monitor) { LOG(INFO) << "Starting IPC Monitor"; - ipcmon = std::make_unique(); + ipcmon = std::make_shared(); ipcmon->setLogger(std::move(getLogger())); ipcmon_thread = - std::make_unique([&ipcmon]() { ipcmon->loop(); }); + std::make_unique([ipcmon]() { ipcmon->loop(); }); data_ipcmon_thread = - std::make_unique([&ipcmon]() { ipcmon->dataLoop(); }); + std::make_unique([ipcmon]() { ipcmon->dataLoop(); }); } if (FLAGS_enable_gpu_monitor) { @@ -212,6 +212,7 @@ int main(int argc, char** argv) auto handler = std::make_shared(dcgm); // use simple json RPC server for now + // In the current scenario, the process can only be terminated and all threads closed using Ctrl+C. auto server = setup_server(handler); server->run(); diff --git a/msmonitor/plugin/ipc_monitor/utils.cpp b/msmonitor/plugin/ipc_monitor/utils.cpp index 7c5c59249..348d07800 100644 --- a/msmonitor/plugin/ipc_monitor/utils.cpp +++ b/msmonitor/plugin/ipc_monitor/utils.cpp @@ -74,16 +74,17 @@ std::string getCurrentTimestamp() auto now = std::chrono::system_clock::now(); auto micros = std::chrono::duration_cast(now.time_since_epoch()); + std::ostringstream oss; std::time_t currentTime = std::chrono::system_clock::to_time_t(now); - std::tm* timeInfo = std::localtime(¤tTime); - - auto milli_time = std::chrono::duration_cast(micros).count() % 1000; - auto micro_time = micros.count() % 1000; + std::tm timeInfo; + if (localtime_r(¤tTime, &timeInfo) != nullptr) { + auto milli_time = std::chrono::duration_cast(micros).count() % 1000; + auto micro_time = micros.count() % 1000; - std::ostringstream oss; - oss << std::put_time(timeInfo, "%Y%m%d%H%M%S"); - constexpr int kMilliTimeWidth = 3; - oss << std::setw(kMilliTimeWidth) << std::setfill('0') << milli_time; + oss << std::put_time(&timeInfo, "%Y%m%d%H%M%S"); + constexpr int kMilliTimeWidth = 3; + oss << std::setw(kMilliTimeWidth) << std::setfill('0') << milli_time; + } return oss.str(); } -- Gitee