diff --git a/adapter/uhdf2/ipc/include/hdf_remote_adapter.h b/adapter/uhdf2/ipc/include/hdf_remote_adapter.h index 142ea9cfb1e6d4c86f67a8a37f493a137431bc97..f5c3585965c1a773ba43bc9bc41411336b25c8b8 100644 --- a/adapter/uhdf2/ipc/include/hdf_remote_adapter.h +++ b/adapter/uhdf2/ipc/include/hdf_remote_adapter.h @@ -34,6 +34,7 @@ public: OHOS::MessageParcel &data, OHOS::MessageParcel &reply, OHOS::MessageOption &option) override; ~HdfRemoteServiceStub(); int32_t Dump(int32_t fd, const std::vector &args) override; + void HdfRemoteStubClearHolder(); private: struct HdfRemoteService *service_; }; diff --git a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp index 0d8eb11a95dceb18b5fd38ff4c61498245a52b00..b08774c3a3a780b0725627833599b4d7b8ffb590 100644 --- a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp +++ b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp @@ -42,6 +42,7 @@ int HdfRemoteServiceStub::OnRemoteRequest(uint32_t code, { (void)option; if (service_ == nullptr) { + HDF_LOGE("service_ is nullptr"); return HDF_ERR_INVALID_OBJECT; } @@ -65,6 +66,11 @@ HdfRemoteServiceStub::~HdfRemoteServiceStub() { } +void HdfRemoteServiceStub::HdfRemoteStubClearHolder() +{ + service_ = nullptr; +} + int32_t HdfRemoteServiceStub::Dump(int32_t fd, const std::vector &args) { return HdfDump(fd, args); @@ -222,6 +228,8 @@ void HdfRemoteAdapterRecycle(struct HdfRemoteService *object) { struct HdfRemoteServiceHolder *holder = reinterpret_cast(object); if (holder != nullptr) { + HdfRemoteServiceStub *stub = reinterpret_cast(holder->remote_.GetRefPtr()); + stub->HdfRemoteStubClearHolder(); holder->remote_ = nullptr; delete holder; }