diff --git a/services/audiomanager/managersource/src/dmic_dev.cpp b/services/audiomanager/managersource/src/dmic_dev.cpp index 12df0aa2b4ac1a195699e4f67a03974fae42ce0f..7a2290a12936f1c223771e15b1abc3702ab0210f 100644 --- a/services/audiomanager/managersource/src/dmic_dev.cpp +++ b/services/audiomanager/managersource/src/dmic_dev.cpp @@ -327,7 +327,12 @@ int32_t DMicDev::SetUp() CHECK_NULL_RETURN(frameData_, ERR_DH_AUDIO_NULLPTR); } isRingbufferOn_.store(true); - ringbufferThread_ = std::thread([this]() { this->ReadFromRingbuffer(); }); + ringbufferThread_ = std::thread([ptr = shared_from_this()]() { + if (!ptr) { + return; + } + ptr->ReadFromRingbuffer(); + }); echoCannelOn_ = true; #ifdef ECHO_CANNEL_ENABLE if (echoCannelOn_ && echoManager_ == nullptr) { @@ -529,7 +534,12 @@ int32_t DMicDev::MmapStart() frameIndex_ = 0; startTime_ = 0; isEnqueueRunning_.store(true); - enqueueDataThread_ = std::thread([this]() { this->EnqueueThread(); }); + enqueueDataThread_ = std::thread([ptr = shared_from_this()]() { + if (!ptr) { + return; + } + ptr->EnqueueThread(); + }); if (pthread_setname_np(enqueueDataThread_.native_handle(), ENQUEUE_THREAD) != DH_SUCCESS) { DHLOGE("Enqueue data thread setname failed."); }