From babf90b9ec72240bfca5e025a84e66a73fa4b36f Mon Sep 17 00:00:00 2001 From: huyx Date: Mon, 13 May 2024 15:38:13 +0800 Subject: [PATCH 1/4] =?UTF-8?q?IPC=E9=80=9A=E4=BF=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AF=BB=E5=86=99=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyx --- adapter/uhdf2/ipc/include/hdf_remote_adapter.h | 1 + adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/adapter/uhdf2/ipc/include/hdf_remote_adapter.h b/adapter/uhdf2/ipc/include/hdf_remote_adapter.h index 142ea9cfb..d5abf08a7 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 FreeService(); 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 0d8eb11a9..55e7e8dc9 100644 --- a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp +++ b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp @@ -26,11 +26,13 @@ #include "hdf_sbuf_ipc.h" #include "hdf_remote_adapter.h" #include "hdf_xcollie.h" +#include #define HDF_LOG_TAG hdf_remote_adapter static constexpr int32_t THREAD_POOL_BASE_THREAD_COUNT = 5; static int32_t g_remoteThreadMax = THREAD_POOL_BASE_THREAD_COUNT; +static pthread_rwlock_t g_rwlock = PTHREAD_RWLOCK_INITIALIZER; HdfRemoteServiceStub::HdfRemoteServiceStub(struct HdfRemoteService *service) : IPCObjectStub(std::u16string(u"")), service_(service) @@ -41,6 +43,8 @@ int HdfRemoteServiceStub::OnRemoteRequest(uint32_t code, OHOS::MessageParcel &data, OHOS::MessageParcel &reply, OHOS::MessageOption &option) { (void)option; + //add read lock + pthread_rwlock_rdlock(&g_rwlock); if (service_ == nullptr) { return HDF_ERR_INVALID_OBJECT; } @@ -55,6 +59,8 @@ int HdfRemoteServiceStub::OnRemoteRequest(uint32_t code, } else { HDF_LOGE("dispatcher or dispatcher->Dispatch is null, flags is: %{public}d", option.GetFlags()); } + //unlock + pthread_rwlock_unlock(&g_rwlock); HdfSbufRecycle(dataSbuf); HdfSbufRecycle(replySbuf); @@ -64,6 +70,10 @@ int HdfRemoteServiceStub::OnRemoteRequest(uint32_t code, HdfRemoteServiceStub::~HdfRemoteServiceStub() { } +void HdfRemoteServiceStub::FreeService() +{ + service_ = nullptr; +} int32_t HdfRemoteServiceStub::Dump(int32_t fd, const std::vector &args) { @@ -220,11 +230,17 @@ struct HdfRemoteService *HdfRemoteAdapterObtain(void) void HdfRemoteAdapterRecycle(struct HdfRemoteService *object) { + //add write lock + pthread_rwlock_wrlock(&g_rwlock); struct HdfRemoteServiceHolder *holder = reinterpret_cast(object); if (holder != nullptr) { + HdfRemoteServiceStub *stub = reinterpret_cast(holder->remote_.GetRefPtr()); + stub->FreeService(); holder->remote_ = nullptr; delete holder; } + //unlock + pthread_rwlock_unlock(&g_rwlock); } int HdfRemoteAdapterAddService(const char *name, struct HdfRemoteService *service) -- Gitee From 3c853dbee2ea2786d7fa5a97b2a77debc6b42725 Mon Sep 17 00:00:00 2001 From: huyx Date: Mon, 13 May 2024 16:39:14 +0800 Subject: [PATCH 2/4] =?UTF-8?q?IPC=E9=80=9A=E4=BF=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AF=BB=E5=86=99=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyx --- adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp index 55e7e8dc9..3ea1d6c63 100644 --- a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp +++ b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp @@ -70,7 +70,8 @@ int HdfRemoteServiceStub::OnRemoteRequest(uint32_t code, HdfRemoteServiceStub::~HdfRemoteServiceStub() { } -void HdfRemoteServiceStub::FreeService() + +void HdfRemoteServiceStub::FreeService() { service_ = nullptr; } -- Gitee From 8716551fa4771720d983de360358f39b226e4421 Mon Sep 17 00:00:00 2001 From: huyx Date: Tue, 14 May 2024 15:33:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?composer=5Fhost=E9=97=AE=E9=A2=98=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyx --- adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp index 3ea1d6c63..7f620a263 100644 --- a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp +++ b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp @@ -26,13 +26,11 @@ #include "hdf_sbuf_ipc.h" #include "hdf_remote_adapter.h" #include "hdf_xcollie.h" -#include #define HDF_LOG_TAG hdf_remote_adapter static constexpr int32_t THREAD_POOL_BASE_THREAD_COUNT = 5; static int32_t g_remoteThreadMax = THREAD_POOL_BASE_THREAD_COUNT; -static pthread_rwlock_t g_rwlock = PTHREAD_RWLOCK_INITIALIZER; HdfRemoteServiceStub::HdfRemoteServiceStub(struct HdfRemoteService *service) : IPCObjectStub(std::u16string(u"")), service_(service) @@ -43,9 +41,8 @@ int HdfRemoteServiceStub::OnRemoteRequest(uint32_t code, OHOS::MessageParcel &data, OHOS::MessageParcel &reply, OHOS::MessageOption &option) { (void)option; - //add read lock - pthread_rwlock_rdlock(&g_rwlock); if (service_ == nullptr) { + HDF_LOGE("service_ is nullptr"); return HDF_ERR_INVALID_OBJECT; } @@ -59,8 +56,6 @@ int HdfRemoteServiceStub::OnRemoteRequest(uint32_t code, } else { HDF_LOGE("dispatcher or dispatcher->Dispatch is null, flags is: %{public}d", option.GetFlags()); } - //unlock - pthread_rwlock_unlock(&g_rwlock); HdfSbufRecycle(dataSbuf); HdfSbufRecycle(replySbuf); @@ -231,8 +226,6 @@ struct HdfRemoteService *HdfRemoteAdapterObtain(void) void HdfRemoteAdapterRecycle(struct HdfRemoteService *object) { - //add write lock - pthread_rwlock_wrlock(&g_rwlock); struct HdfRemoteServiceHolder *holder = reinterpret_cast(object); if (holder != nullptr) { HdfRemoteServiceStub *stub = reinterpret_cast(holder->remote_.GetRefPtr()); @@ -240,8 +233,6 @@ void HdfRemoteAdapterRecycle(struct HdfRemoteService *object) holder->remote_ = nullptr; delete holder; } - //unlock - pthread_rwlock_unlock(&g_rwlock); } int HdfRemoteAdapterAddService(const char *name, struct HdfRemoteService *service) -- Gitee From c015693d475d7d0b4a43003d628bbf7cd6f5c020 Mon Sep 17 00:00:00 2001 From: huyx Date: Tue, 14 May 2024 15:37:57 +0800 Subject: [PATCH 4/4] =?UTF-8?q?composer=5Fhost=E9=97=AE=E9=A2=98=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyx --- adapter/uhdf2/ipc/include/hdf_remote_adapter.h | 2 +- adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/adapter/uhdf2/ipc/include/hdf_remote_adapter.h b/adapter/uhdf2/ipc/include/hdf_remote_adapter.h index d5abf08a7..f5c358596 100644 --- a/adapter/uhdf2/ipc/include/hdf_remote_adapter.h +++ b/adapter/uhdf2/ipc/include/hdf_remote_adapter.h @@ -34,7 +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 FreeService(); + 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 7f620a263..b08774c3a 100644 --- a/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp +++ b/adapter/uhdf2/ipc/src/hdf_remote_adapter.cpp @@ -66,7 +66,7 @@ HdfRemoteServiceStub::~HdfRemoteServiceStub() { } -void HdfRemoteServiceStub::FreeService() +void HdfRemoteServiceStub::HdfRemoteStubClearHolder() { service_ = nullptr; } @@ -229,7 +229,7 @@ void HdfRemoteAdapterRecycle(struct HdfRemoteService *object) struct HdfRemoteServiceHolder *holder = reinterpret_cast(object); if (holder != nullptr) { HdfRemoteServiceStub *stub = reinterpret_cast(holder->remote_.GetRefPtr()); - stub->FreeService(); + stub->HdfRemoteStubClearHolder(); holder->remote_ = nullptr; delete holder; } -- Gitee