diff --git a/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h b/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h index 89e6843bd07ed209c53638e49ec245fcea68d8d1..721e914e478a9f35e8651ddf749b5963fe2fad1f 100644 --- a/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h +++ b/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h @@ -19,6 +19,7 @@ #include "sink/i_audio_render_sink.h" #include #include +#include #include "v5_0/iaudio_manager.h" #include "audio_utils.h" #include "util/audio_running_lock.h" @@ -125,6 +126,7 @@ private: FILE *dumpFile_ = nullptr; std::string dumpFileName_ = ""; std::mutex sinkMutex_; + std::thread testThread_; }; } // namespace AudioStandard diff --git a/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp b/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp index ddbbdd3dcb7d08e4808f8851d2effa384ef38dda..11f0671d99640fec1cae39c39edd88bbaf7ed2e8 100644 --- a/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp +++ b/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp @@ -33,6 +33,14 @@ namespace OHOS { namespace AudioStandard { DirectAudioRenderSink::~DirectAudioRenderSink() { + std::unique_lock lock(sinkMutex_); + if (started_) { + started_ = false; + } + lock.unlock(); + if (testThread_.joinable()) { + testThread_.join(); + } } int32_t DirectAudioRenderSink::Init(const IAudioSinkAttr &attr) @@ -100,7 +108,7 @@ int32_t DirectAudioRenderSink::Start(void) void DirectAudioRenderSink::StartTestThread(void) { - std::thread([this]() { + testThread_ = std::thread([this]() { bool keepRunning = true; while (keepRunning) { std::unique_lock lock(sinkMutex_); @@ -109,7 +117,7 @@ void DirectAudioRenderSink::StartTestThread(void) lock.unlock(); std::this_thread::sleep_for(std::chrono::milliseconds(TEST_CALLBACK_TIME)); } - }).detach(); + }); } int32_t DirectAudioRenderSink::Stop(void)