summaryrefslogtreecommitdiff
path: root/libs/binder/BackendUnifiedServiceManager.cpp
diff options
context:
space:
mode:
author Alice Wang <aliceywang@google.com> 2025-01-02 11:53:05 +0000
committer Alice Wang <aliceywang@google.com> 2025-01-08 08:58:39 +0000
commit2b61344ddd35ceb216a836157a10769cbfaac0fa (patch)
tree5511a7b748d718e125d1b65c1ed45b2440ac7499 /libs/binder/BackendUnifiedServiceManager.cpp
parent1656f6ba8334eeba3823f0669eccd07a464d1654 (diff)
[native] Restore ServiceManager#checkService() to return IBinder
This fixes crashes in 3p libraries. A new API ServiceManager#checkService2() has been introduced to work with the Service enum type. Bug: 387175643 Test: atest servicemanager_test Change-Id: I647f4a11469717c54111afab562a0be2d5260044
Diffstat (limited to 'libs/binder/BackendUnifiedServiceManager.cpp')
-rw-r--r--libs/binder/BackendUnifiedServiceManager.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/libs/binder/BackendUnifiedServiceManager.cpp b/libs/binder/BackendUnifiedServiceManager.cpp
index ee3d6af742..4220cdd0e8 100644
--- a/libs/binder/BackendUnifiedServiceManager.cpp
+++ b/libs/binder/BackendUnifiedServiceManager.cpp
@@ -238,7 +238,17 @@ Status BackendUnifiedServiceManager::getService2(const ::std::string& name, os::
return status;
}
-Status BackendUnifiedServiceManager::checkService(const ::std::string& name, os::Service* _out) {
+Status BackendUnifiedServiceManager::checkService(const ::std::string& name,
+ sp<IBinder>* _aidl_return) {
+ os::Service service;
+ Status status = checkService2(name, &service);
+ if (status.isOk()) {
+ *_aidl_return = service.get<os::Service::Tag::serviceWithMetadata>().service;
+ }
+ return status;
+}
+
+Status BackendUnifiedServiceManager::checkService2(const ::std::string& name, os::Service* _out) {
os::Service service;
if (returnIfCached(name, _out)) {
return Status::ok();
@@ -246,7 +256,7 @@ Status BackendUnifiedServiceManager::checkService(const ::std::string& name, os:
Status status = Status::ok();
if (mTheRealServiceManager) {
- status = mTheRealServiceManager->checkService(name, &service);
+ status = mTheRealServiceManager->checkService2(name, &service);
}
if (status.isOk()) {
status = toBinderService(name, service, _out);