From 54df8168ee65753981859214861f4d6d394f68eb Mon Sep 17 00:00:00 2001 From: qinlong Date: Thu, 22 Sep 2022 21:09:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=90=86Cppcheck=E5=92=8C=E6=95=B4?= =?UTF-8?q?=E6=94=B9crash=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qinlong --- .../screen_sink/src/dscreen_sink_handler.cpp | 18 +++++++++--------- .../src/dscreen_source_handler.cpp | 18 +++++++++--------- services/screendemo/test.cpp | 5 ++++- .../dscreenmgr/src/dscreen_manager.cpp | 2 +- .../src/dscreen_source_service.cpp | 1 - 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/interfaces/innerkits/native_cpp/screen_sink/src/dscreen_sink_handler.cpp b/interfaces/innerkits/native_cpp/screen_sink/src/dscreen_sink_handler.cpp index 38bdd4b4..e3147404 100644 --- a/interfaces/innerkits/native_cpp/screen_sink/src/dscreen_sink_handler.cpp +++ b/interfaces/innerkits/native_cpp/screen_sink/src/dscreen_sink_handler.cpp @@ -166,22 +166,22 @@ void DScreenSinkHandler::DScreenSinkSvrRecipient::OnRemoteDied(const wptr &remote) { DHLOGI("DScreenSinkHandler OnRemoteSinkSvrDied"); + std::lock_guard lock(proxyMutex_); + if (dScreenSinkProxy_ == nullptr) { + DHLOGE("dScreenSinkProxy is nullptr."); + return; + } sptr remoteObject = remote.promote(); if (remoteObject == nullptr) { DHLOGE("OnRemoteDied remote promoted failed"); return; } - std::lock_guard lock(proxyMutex_); - if (dScreenSinkProxy_ == nullptr || dScreenSinkProxy_->AsObject() == nullptr) { - delete sinkSvrRecipient_; - sinkSvrRecipient_ = nullptr; - dScreenSinkProxy_ = nullptr; - return; - } - if (sinkSvrRecipient_ == nullptr) { - dScreenSinkProxy_ = nullptr; + + if (dScreenSinkProxy_->AsObject() != remoteObject) { + DHLOGE("OnRemoteSinkSvrDied not found remote object."); return; } + dScreenSinkProxy_->AsObject()->RemoveDeathRecipient(sinkSvrRecipient_); dScreenSinkProxy_ = nullptr; } diff --git a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp index 61322939..c60c24ad 100644 --- a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp +++ b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp @@ -205,22 +205,22 @@ void DScreenSourceHandler::DScreenSourceSvrRecipient::OnRemoteDied(const wptr &remote) { DHLOGI("OnRemoteSourceSvrDied"); + std::lock_guard lock(proxyMutex_); + if (dScreenSourceProxy_ == nullptr) { + DHLOGE("dScreenSourceProxy is nullptr."); + return; + } sptr remoteObject = remote.promote(); if (remoteObject == nullptr) { DHLOGE("OnRemoteDied remote promoted failed"); return; } - std::lock_guard lock(proxyMutex_); - if (dScreenSourceProxy_ == nullptr || dScreenSourceProxy_->AsObject() == nullptr) { - delete sourceSvrRecipient_; - sourceSvrRecipient_ = nullptr; - dScreenSourceProxy_ = nullptr; - return; - } - if (sourceSvrRecipient_ == nullptr) { - dScreenSourceProxy_ = nullptr; + + if (dScreenSourceProxy_->AsObject() != remoteObject) { + DHLOGE("OnRemoteSourceSvrDied not found remote object."); return; } + dScreenSourceProxy_->AsObject()->RemoveDeathRecipient(sourceSvrRecipient_); dScreenSourceProxy_ = nullptr; } diff --git a/services/screendemo/test.cpp b/services/screendemo/test.cpp index 9cfd52ee..dd37dec9 100644 --- a/services/screendemo/test.cpp +++ b/services/screendemo/test.cpp @@ -45,6 +45,8 @@ using namespace OHOS::Media; namespace { static char const *g_pkgName = "ohos.dsoftbus.tool"; + const uint32_t MAX_WINDOW_WIDTH = 2560; + const uint32_t MAX_WINDOW_HEIGHT = 1600; } vector> QueryRemoteScreenInfo() @@ -294,7 +296,8 @@ static void CreateWindow() uint32_t windowHeight; cin >> windowHeight; - if (windowWidth <= 0 || windowHeight <= 0) { + if (windowWidth == 0 || windowWidth >= MAX_WINDOW_WIDTH || + windowHeight == 0 || windowHeight >= MAX_WINDOW_HEIGHT) { cout << "Invalid window size." << endl; return; } diff --git a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp index c3e4d3db..c6902cf8 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp @@ -184,7 +184,7 @@ int32_t DScreenManager::RemoveFromGroup(const std::shared_ptr &changedS DHLOGD("screen is disconnecting, no need handle change"); return DH_SUCCESS; } - std::shared_ptr mapRelation = nullptr; + { std::lock_guard lock(dScreenMapRelationMtx_); mapRelations_.erase(screenId); diff --git a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp index 58278abe..1f24b76c 100644 --- a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp +++ b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp @@ -103,7 +103,6 @@ int32_t DScreenSourceService::ReleaseSource() int32_t DScreenSourceService::RegisterDistributedHardware(const std::string &devId, const std::string &dhId, const EnableParam ¶m, const std::string &reqId) { - std::string version = param.version; std::string attrs = param.attrs; int ret = DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, attrs, reqId); if (ret != DH_SUCCESS) { -- Gitee