From ac79c2b06b54e5e1e8a5a180522c270d2feb3bf0 Mon Sep 17 00:00:00 2001 From: zhaoyuanbo Date: Thu, 4 Sep 2025 15:54:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E5=BD=95=E5=B1=8F=EF=BC=8C=E5=88=87=E6=8D=A2=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=EF=BC=8C=E7=BB=93=E6=9D=9F=E5=BD=95=E5=B1=8F?= =?UTF-8?q?=E4=BC=9A=E6=AD=BB=E9=94=81=E7=9A=84=E9=97=AE=E9=A2=98=20Signed?= =?UTF-8?q?-off-by:=20zhaoyuanbo=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/screen_capture/server/screen_capture_server.cpp | 4 +++- .../services/screen_capture/server/screen_capture_server.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index c96e07f6d..822213847 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -3950,7 +3950,6 @@ int32_t ScreenCaptureServer::StopScreenCaptureByEvent(AVScreenCaptureStateCode s MEDIA_LOGI("StopScreenCaptureByEvent repeat, capture is STOPPED."); return MSERR_OK; } - std::lock_guard lock(mutex_); return StopScreenCaptureInner(stateCode); } @@ -3970,6 +3969,7 @@ void ScreenCaptureServer::SetSystemScreenRecorderStatus(bool status) int32_t ScreenCaptureServer::StopScreenCaptureInner(AVScreenCaptureStateCode stateCode) { + std::unique_lock lock(innermutex_); MediaTrace trace("ScreenCaptureServer::StopScreenCaptureInner"); MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " StopScreenCaptureInner start, stateCode:%{public}d.", FAKE_POINTER(this), stateCode); @@ -4006,7 +4006,9 @@ int32_t ScreenCaptureServer::StopScreenCaptureInner(AVScreenCaptureStateCode sta #endif AccountObserver::GetInstance().UnregisterAccountObserverCallBack(screenCaptureObserverCb_); if (screenCaptureObserverCb_) { + lock.unlock(); screenCaptureObserverCb_->Release(); + lock.lock(); } ScreenManager::GetInstance().UnregisterScreenListener(screenConnectListener_); UnRegisterWindowLifecycleListener(); diff --git a/services/services/screen_capture/server/screen_capture_server.h b/services/services/screen_capture/server/screen_capture_server.h index a753ab3fa..c0077e1bb 100644 --- a/services/services/screen_capture/server/screen_capture_server.h +++ b/services/services/screen_capture/server/screen_capture_server.h @@ -282,6 +282,7 @@ private: private: std::mutex mutex_; std::mutex cbMutex_; + std::mutex innerMutex_; std::mutex inCallMutex_; mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureObserverCb_ = nullptr; -- Gitee From 6c8a068f2bf863dc16a05034b79ef89ad6bfcd75 Mon Sep 17 00:00:00 2001 From: zhaoyuanbo Date: Thu, 4 Sep 2025 17:21:19 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=97=E6=AF=8D?= =?UTF-8?q?=E9=94=99=E8=AF=AF=20Signed-off-by:=20zhaoyuanbo=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/screen_capture/server/screen_capture_server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 822213847..8f4d5308e 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -3969,7 +3969,7 @@ void ScreenCaptureServer::SetSystemScreenRecorderStatus(bool status) int32_t ScreenCaptureServer::StopScreenCaptureInner(AVScreenCaptureStateCode stateCode) { - std::unique_lock lock(innermutex_); + std::unique_lock lock(innerMutex_); MediaTrace trace("ScreenCaptureServer::StopScreenCaptureInner"); MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " StopScreenCaptureInner start, stateCode:%{public}d.", FAKE_POINTER(this), stateCode); -- Gitee