From 76c5f06596c361ed12d304d7682132d96483a7d9 Mon Sep 17 00:00:00 2001 From: qianli <847171309@qq.com> Date: Mon, 5 Jul 2021 16:27:31 +0800 Subject: [PATCH 1/3] Get SA Change-Id: I2bbe9e38da921faffa8c7fc50343f39c0c725a65 --- .../libdbinder/include/dbinder_service.h | 1 + .../dbinder_service/src/dbinder_service.cpp | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/interfaces/innerkits/libdbinder/include/dbinder_service.h b/interfaces/innerkits/libdbinder/include/dbinder_service.h index 0b09341c..91fd83cd 100755 --- a/interfaces/innerkits/libdbinder/include/dbinder_service.h +++ b/interfaces/innerkits/libdbinder/include/dbinder_service.h @@ -104,6 +104,7 @@ public: sptr MakeRemoteBinder(const std::u16string &serviceName, const std::string &deviceID, binder_uintptr_t binderObject, uint64_t pid = 0); bool RegisterRemoteProxy(std::u16string serviceName, sptr binderObject); + bool RegisterRemoteProxy(std::u16string serviceName, int32_t systemAbilityId); bool OnRemoteMessageTask(const struct DHandleEntryTxRx *message); std::shared_ptr QuerySessionObject(binder_uintptr_t stub); bool DetachDeathRecipient(sptr object); diff --git a/services/dbinder/dbinder_service/src/dbinder_service.cpp b/services/dbinder/dbinder_service/src/dbinder_service.cpp index 761959f8..1e41c6d1 100755 --- a/services/dbinder/dbinder_service/src/dbinder_service.cpp +++ b/services/dbinder/dbinder_service/src/dbinder_service.cpp @@ -564,6 +564,26 @@ bool DBinderService::RegisterRemoteProxy(std::u16string serviceName, sptr lockGuard(remoteBinderMutex_); + + // clear historical remnants, Don't care if it succeeds + (void)mapRemoteBinderObjects_.erase(serviceName); + auto result = mapRemoteBinderObjects_.insert(std::pair(serviceName, binder)); + return result.second; +} + bool DBinderService::OnRemoteMessageTask(const struct DHandleEntryTxRx *message) { if (message == nullptr) { -- Gitee From 3b79d6533c6259dc5516077f44e1915dfccc2934 Mon Sep 17 00:00:00 2001 From: ql Date: Mon, 5 Jul 2021 13:13:50 +0000 Subject: [PATCH 2/3] update services/dbinder/dbinder_service/src/dbinder_service.cpp. --- .../dbinder_service/src/dbinder_service.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/services/dbinder/dbinder_service/src/dbinder_service.cpp b/services/dbinder/dbinder_service/src/dbinder_service.cpp index 1e41c6d1..2e186912 100755 --- a/services/dbinder/dbinder_service/src/dbinder_service.cpp +++ b/services/dbinder/dbinder_service/src/dbinder_service.cpp @@ -555,29 +555,25 @@ bool DBinderService::RegisterRemoteProxy(std::u16string serviceName, sptr lockGuard(remoteBinderMutex_); - - // clear historical remnants, Don't care if it succeeds - (void)mapRemoteBinderObjects_.erase(serviceName); - auto result = mapRemoteBinderObjects_.insert(std::pair(serviceName, binder)); - return result.second; + return RegisterRemoteProxyInner(serviceName, binder); } bool DBinderService::RegisterRemoteProxy(std::u16string serviceName, int32_t systemAbilityId) { DBINDER_LOGI("register remote proxy, service name = %{public}s", Str16ToStr8(serviceName).c_str()); - if (serviceName.length() == 0) { + if (serviceName.length() == 0 || systemAbilityId <= 0) { DBINDER_LOGE("serviceName.length() = %zu", serviceName.length()); return false; } binder_uintptr_t binder = (binder_uintptr_t)systemAbilityId; - DBINDER_LOGI("register remote proxy"); + return RegisterRemoteProxyInner(serviceName, binder); +} +bool DBinderService::RegisterRemoteProxyInner(std::u16string serviceName, binder_uintptr_t binder) +{ std::unique_lock lockGuard(remoteBinderMutex_); - // clear historical remnants, Don't care if it succeeds (void)mapRemoteBinderObjects_.erase(serviceName); auto result = mapRemoteBinderObjects_.insert(std::pair(serviceName, binder)); -- Gitee From 9cd8e51ed3f5f7b1ccd5fea4eefdfcc97d79650f Mon Sep 17 00:00:00 2001 From: ql Date: Mon, 5 Jul 2021 13:46:40 +0000 Subject: [PATCH 3/3] update interfaces/innerkits/libdbinder/include/dbinder_service.h. --- interfaces/innerkits/libdbinder/include/dbinder_service.h | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/innerkits/libdbinder/include/dbinder_service.h b/interfaces/innerkits/libdbinder/include/dbinder_service.h index 91fd83cd..cd36954e 100755 --- a/interfaces/innerkits/libdbinder/include/dbinder_service.h +++ b/interfaces/innerkits/libdbinder/include/dbinder_service.h @@ -105,6 +105,7 @@ public: const std::string &deviceID, binder_uintptr_t binderObject, uint64_t pid = 0); bool RegisterRemoteProxy(std::u16string serviceName, sptr binderObject); bool RegisterRemoteProxy(std::u16string serviceName, int32_t systemAbilityId); + bool RegisterRemoteProxyInner(std::u16string serviceName, binder_uintptr_t binder); bool OnRemoteMessageTask(const struct DHandleEntryTxRx *message); std::shared_ptr QuerySessionObject(binder_uintptr_t stub); bool DetachDeathRecipient(sptr object); -- Gitee