diff --git a/display/composer/v1_0/display_command/display_cmd_responser.h b/display/composer/v1_0/display_command/display_cmd_responser.h index 12cc8c780bba2c1f8f0015dba9f0318045cbcf64..628d8b11ca864fe6337cb356108a8623786cbde8 100755 --- a/display/composer/v1_0/display_command/display_cmd_responser.h +++ b/display/composer/v1_0/display_command/display_cmd_responser.h @@ -100,11 +100,6 @@ public: request_.reset(); } request_ = request; - requestData_.reset(new char[CmdUtils::INIT_ELEMENT_COUNT], std::default_delete()); - if (requestData_ == nullptr) { - HDF_LOGE("requestData alloc failed."); - return HDF_FAILURE; - } return HDF_SUCCESS; } @@ -169,15 +164,16 @@ public: HDF_LOGE("%{public}s: inEleCnt:%{public}u is too large", __func__, inEleCnt); return HDF_FAILURE; } + std::shared_ptr requestData(new char[inEleCnt * CmdUtils::ELEMENT_SIZE], std::default_delete()); int32_t ret = HDF_SUCCESS; { std::lock_guard lock(requestMutex_); - ret = request_->Read(reinterpret_cast(requestData_.get()), inEleCnt, + ret = request_->Read(reinterpret_cast(requestData.get()), inEleCnt, CmdUtils::TRANSFER_WAIT_TIME); } CommandDataUnpacker unpacker; - unpacker.Init(requestData_.get(), inEleCnt << CmdUtils::MOVE_SIZE); + unpacker.Init(requestData.get(), inEleCnt << CmdUtils::MOVE_SIZE); #ifdef DEBUG_DISPLAY_CMD_RAW_DATA unpacker.Dump(); #endif // DEBUG_DISPLAY_CMD_RAW_DATA @@ -1185,7 +1181,6 @@ protected: std::queue delayFreeQueue_; std::mutex requestMutex_; std::mutex replyMutex_; - std::shared_ptr requestData_; }; using HdiDisplayCmdResponser = DisplayCmdResponser, DisplayComposerVdiAdapter>; } // namespace V1_0 diff --git a/display/composer/v1_2/display_command/display_cmd_responser.h b/display/composer/v1_2/display_command/display_cmd_responser.h index 79243346b2bb6b61b1b162cef9b37e0168b41bc9..8a328edffeab10fe13e75dcd66591f374781444a 100644 --- a/display/composer/v1_2/display_command/display_cmd_responser.h +++ b/display/composer/v1_2/display_command/display_cmd_responser.h @@ -227,14 +227,15 @@ REPLY: int32_t CmdRequest(uint32_t inEleCnt, const std::vector& inFds, uint32_t& outEleCnt, std::vector& outFds) { + std::shared_ptr requestData(new char[inEleCnt * CmdUtils::ELEMENT_SIZE], std::default_delete()); int32_t ret = HDF_SUCCESS; { std::lock_guard lock(requestMutex_); - ret = request_->Read(reinterpret_cast(requestData_.get()), inEleCnt, + ret = request_->Read(reinterpret_cast(requestData.get()), inEleCnt, CmdUtils::TRANSFER_WAIT_TIME); } CommandDataUnpacker unpacker; - unpacker.Init(requestData_.get(), inEleCnt << CmdUtils::MOVE_SIZE); + unpacker.Init(requestData.get(), inEleCnt << CmdUtils::MOVE_SIZE); #ifdef DEBUG_DISPLAY_CMD_RAW_DATA unpacker.Dump(); #endif // DEBUG_DISPLAY_CMD_RAW_DATA @@ -243,28 +244,21 @@ REPLY: bool retBool = unpacker.PackBegin(unpackCmd); DISPLAY_CHK_RETURN(retBool == false, HDF_FAILURE, HDF_LOGE("%{public}s: error: Check RequestBegin failed", __func__)); - if (unpackCmd != CONTROL_CMD_REQUEST_BEGIN) { - HDF_LOGE("error: unpacker PackBegin cmd not match, cmd(%{public}d)=%{public}s.", unpackCmd, - CmdUtils::CommandToString(unpackCmd)); - request_->Reset(); - reply_->Reset(); - return HDF_FAILURE; - } + DISPLAY_CHK_RETURN(unpackCmd != CONTROL_CMD_REQUEST_BEGIN, HDF_FAILURE, + HDF_LOGI("error: unpacker PackBegin cmd not match, cmd(%{public}d)=%{public}s.", unpackCmd, + CmdUtils::CommandToString(unpackCmd))); DISPLAY_CHK_RETURN(PeriodDataReset() == HDF_FAILURE, HDF_FAILURE, HDF_LOGE("%{public}s: error: PeriodDataReset failed", __func__)); - while (unpacker.NextSection()) { + while (ret == HDF_SUCCESS && unpacker.NextSection()) { DISPLAY_CHK_RETURN(unpacker.BeginSection(unpackCmd) == false, HDF_FAILURE, HDF_LOGE("error: PackSection failed, unpackCmd=%{public}s.", CmdUtils::CommandToString(unpackCmd))); - if (ProcessRequestCmd(unpacker, unpackCmd, inFds, outFds) != HDF_SUCCESS) { - HDF_LOGE("%{public}s: ProcessRequestCmd failed, unpackCmd=%{public}d", __func__, unpackCmd); - request_->Reset(); - reply_->Reset(); - return HDF_FAILURE; - } + ret = ProcessRequestCmd(unpacker, unpackCmd, inFds, outFds); } + DISPLAY_CHK_RETURN(ret != HDF_SUCCESS, ret, + HDF_LOGE("%{public}s: ProcessRequestCmd failed", __func__)); /* pack request end commands */ replyPacker_.PackEnd(CONTROL_CMD_REPLY_END); @@ -466,7 +460,6 @@ private: using BaseType1_1::CmdRequestDataWrite; using BaseType1_1::requestMutex_; using BaseType1_1::replyMutex_; - using BaseType1_1::requestData_; }; using HdiDisplayCmdResponser = DisplayCmdResponser, DisplayComposerVdiAdapter>;