From dc4157a7a998bcbf28a34040a0c091b23ba00d7c Mon Sep 17 00:00:00 2001 From: Grady Date: Thu, 10 Mar 2022 17:12:41 +0800 Subject: [PATCH] fix issue Signed-off-by: Grady Change-Id: Iea4af47fc1d57ac5c5fe41a334ec4072406f8162 --- dmserver/src/abstract_display_controller.cpp | 3 +++ dmserver/src/abstract_screen_controller.cpp | 9 ++++++--- .../kits/napi/display_runtime/napi/js_screen_manager.cpp | 4 ++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dmserver/src/abstract_display_controller.cpp b/dmserver/src/abstract_display_controller.cpp index 8a4f99be..ccc4e7ca 100644 --- a/dmserver/src/abstract_display_controller.cpp +++ b/dmserver/src/abstract_display_controller.cpp @@ -222,6 +222,9 @@ DisplayId AbstractDisplayController::ProcessExpandScreenDisconnected( sptr absScreen, sptr screenGroup) { WLOGI("expand screen disconnect"); + if (absScreen == nullptr) { + return DISPLAY_ID_INVALID; + } for (auto iter = abstractDisplayMap_.begin(); iter != abstractDisplayMap_.end(); iter++) { DisplayId displayId = iter->first; sptr abstractDisplay = iter->second; diff --git a/dmserver/src/abstract_screen_controller.cpp b/dmserver/src/abstract_screen_controller.cpp index cf42319e..a69f87f5 100644 --- a/dmserver/src/abstract_screen_controller.cpp +++ b/dmserver/src/abstract_screen_controller.cpp @@ -70,7 +70,7 @@ std::vector AbstractScreenController::GetAllScreenIds() std::lock_guard lock(mutex_); std::vector res; for (auto iter = dmsScreenMap_.begin(); iter != dmsScreenMap_.end(); iter++) { - res.push_back(iter->first); + res.emplace_back(iter->first); } return res; } @@ -132,6 +132,9 @@ std::shared_ptr AbstractScreenController::GetRSDisplayNodeByScree if (screen == nullptr) { return nullptr; } + if (screen->rsDisplayNode_ == nullptr) { + return nullptr; + } WLOGI("GetRSDisplayNodeByScreenId: screen: %{public}" PRIu64", nodeId: %{public}" PRIu64" ", screen->dmsId_, screen->rsDisplayNode_->GetId()); return screen->rsDisplayNode_; @@ -335,7 +338,7 @@ bool AbstractScreenController::FillAbstractScreen(sptr& absScree info->width_ = static_cast(rsScreenModeInfo.GetScreenWidth()); info->height_ = static_cast(rsScreenModeInfo.GetScreenHeight()); info->refreshRate_ = rsScreenModeInfo.GetScreenFreshRate(); - absScreen->modes_.push_back(info); + absScreen->modes_.emplace_back(info); WLOGD("fill screen w/h:%{public}d/%{public}d", info->width_, info->height_); } int32_t activeModeId = rsInterface_.GetScreenActiveMode(rsScreenId).GetScreenModeId(); @@ -484,7 +487,7 @@ ScreenId AbstractScreenController::CreateVirtualScreen(VirtualScreenOption optio if (defaultScreen != nullptr && defaultScreen->GetActiveScreenMode() != nullptr) { info->refreshRate_ = defaultScreen->GetActiveScreenMode()->refreshRate_; } - absScreen->modes_.push_back(info); + absScreen->modes_.emplace_back(info); absScreen->activeIdx_ = 0; absScreen->type_ = ScreenType::VIRTUAL; dmsScreenMap_.insert(std::make_pair(dmsScreenId, absScreen)); diff --git a/interfaces/kits/napi/display_runtime/napi/js_screen_manager.cpp b/interfaces/kits/napi/display_runtime/napi/js_screen_manager.cpp index 878579c4..e97534e4 100644 --- a/interfaces/kits/napi/display_runtime/napi/js_screen_manager.cpp +++ b/interfaces/kits/napi/display_runtime/napi/js_screen_manager.cpp @@ -182,6 +182,10 @@ void UnRegisterScreenListenerWithType(const std::string& type, NativeValue* valu type.c_str()); return; } + if (value == nullptr) { + WLOGFE("JsScreenManager::UnRegisterScreenListenerWithType value is nullptr"); + return; + } for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { if (value->StrictEquals(it->first->Get())) { it->second->RemoveCallback(value);