From 817bf571780908442860592e2e7b8c1591429003 Mon Sep 17 00:00:00 2001 From: yuanye Date: Mon, 18 Nov 2024 16:10:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=87=E9=9B=86?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=80=80=E5=87=BA=E6=97=B6=E6=AD=BB=E9=94=81?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yuanye --- src/perf_events.cpp | 6 ++++- .../common/native/perf_events_test.cpp | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/perf_events.cpp b/src/perf_events.cpp index 9440382..f822526 100644 --- a/src/perf_events.cpp +++ b/src/perf_events.cpp @@ -588,7 +588,11 @@ void PerfEvents::ExitReadRecordBufThread() __sync_synchronize(); cvRecordBuf_.notify_one(); } - readRecordBufThread_.join(); + if (readRecordBufThread_.get_id() != std::this_thread::get_id()) { + readRecordBufThread_.join(); + } else { + readRecordBufThread_.detach(); + } } } diff --git a/test/unittest/common/native/perf_events_test.cpp b/test/unittest/common/native/perf_events_test.cpp index e12fef4..d9021a2 100644 --- a/test/unittest/common/native/perf_events_test.cpp +++ b/test/unittest/common/native/perf_events_test.cpp @@ -324,6 +324,29 @@ HWTEST_F(PerfEventsTest, StatNormal, TestSize.Level1) std::string stringOut = stdoutRecord.Stop(); } + +HWTEST_F(PerfEventsTest, ExitReadRecordBufThread, TestSize.Level1) +{ + std::atomic count = 0; + std::thread t1([&count]() { + PerfEvents* event = new PerfEvents(); + event->cpuMmap = {}; + event->isLowPriorityThread_ = false; + + auto func = [event, &count]() { + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + delete event; + count++; + } + event->readRecordBufThread_ = std::thread(func); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + count++; + }); + t1.detach(); + + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + EXPECT_EQ(count, 2); +} } // namespace HiPerf } // namespace Developtools } // namespace OHOS -- Gitee From 64c9e8324d82f3baba0440a4a900b5a20f360cbb Mon Sep 17 00:00:00 2001 From: yuanye Date: Mon, 18 Nov 2024 16:14:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yuanye --- test/unittest/common/native/perf_events_test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unittest/common/native/perf_events_test.cpp b/test/unittest/common/native/perf_events_test.cpp index d9021a2..59b06c0 100644 --- a/test/unittest/common/native/perf_events_test.cpp +++ b/test/unittest/common/native/perf_events_test.cpp @@ -330,21 +330,21 @@ HWTEST_F(PerfEventsTest, ExitReadRecordBufThread, TestSize.Level1) std::atomic count = 0; std::thread t1([&count]() { PerfEvents* event = new PerfEvents(); - event->cpuMmap = {}; + event->cpuMmap_ = {}; event->isLowPriorityThread_ = false; auto func = [event, &count]() { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); delete event; count++; - } + }; event->readRecordBufThread_ = std::thread(func); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); count++; }); t1.detach(); - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + std::this_thread::sleep_for(std::chrono::milliseconds(3000)); EXPECT_EQ(count, 2); } } // namespace HiPerf -- Gitee