From 40c3018ff935e1122d1b1cccb3d0d43b54698590 Mon Sep 17 00:00:00 2001 From: dengliang <15934868816@139.com> Date: Fri, 12 Sep 2025 16:25:28 +0800 Subject: [PATCH 1/2] add mutex Signed-off-by: dengliang <15934868816@139.com> --- service/window_manager/include/screen_pointer.h | 1 + service/window_manager/src/screen_pointer.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/service/window_manager/include/screen_pointer.h b/service/window_manager/include/screen_pointer.h index 63593fa476..eedfc9f06c 100644 --- a/service/window_manager/include/screen_pointer.h +++ b/service/window_manager/include/screen_pointer.h @@ -213,6 +213,7 @@ private: private: std::mutex mtx_; + std::shared_mutex bufferMutex_; uint64_t screenId_{0}; uint32_t width_{0}; diff --git a/service/window_manager/src/screen_pointer.cpp b/service/window_manager/src/screen_pointer.cpp index d6da11bde4..025cc2e3d4 100644 --- a/service/window_manager/src/screen_pointer.cpp +++ b/service/window_manager/src/screen_pointer.cpp @@ -187,12 +187,14 @@ bool ScreenPointer::InitCommonBuffer(const OHOS::BufferRequestConfig &bufferCfg) buffer_ptr_t ScreenPointer::GetDefaultBuffer() { + std::unique_lock lock(bufferMutex_); currentBuffer_ = defaultBuffer_; return defaultBuffer_; } buffer_ptr_t ScreenPointer::GetTransparentBuffer() { + std::unique_lock lock(bufferMutex_); currentBuffer_ = transparentBuffer_; return transparentBuffer_; } @@ -207,6 +209,7 @@ buffer_ptr_t ScreenPointer::GetCommonBuffer() bufferId_++; bufferId_ %= bufferSize; + std::unique_lock lock(bufferMutex_); currentBuffer_ = commonBuffers_[bufferId_]; return commonBuffers_[bufferId_]; } @@ -234,6 +237,7 @@ bool ScreenPointer::IsDefaultCfg(const RenderConfig &cfg) buffer_ptr_t ScreenPointer::GetCurrentBuffer() { + std::shared_lock lock(bufferMutex_); return currentBuffer_; } -- Gitee From dac24eb8758baa0e64de58f26c0b1037c3397d30 Mon Sep 17 00:00:00 2001 From: dengliang <15934868816@139.com> Date: Fri, 12 Sep 2025 19:05:44 +0800 Subject: [PATCH 2/2] add mutex Signed-off-by: dengliang <15934868816@139.com> --- service/window_manager/src/screen_pointer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/window_manager/src/screen_pointer.cpp b/service/window_manager/src/screen_pointer.cpp index 025cc2e3d4..a04c4d5cc6 100644 --- a/service/window_manager/src/screen_pointer.cpp +++ b/service/window_manager/src/screen_pointer.cpp @@ -142,7 +142,7 @@ bool ScreenPointer::Init(PointerRenderer &render) MMI_HILOGE("ScreenPointer InitCommonBuffer failed"); return false; } - currentBuffer_ = GetCommonBuffer(); + GetCommonBuffer(); return true; } -- Gitee