From 520d12c53cb456f8722a2e8e3bc6d6485f5647e1 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Thu, 15 Dec 2016 15:50:17 -0800 Subject: [PATCH] HwBinder: fail gracefully for device w/o hwbinder Test: compiles Change-Id: I03ffd0d7480c5771634977e30ccf02b39f69f8ba --- core/jni/android_os_HwBinder.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/core/jni/android_os_HwBinder.cpp b/core/jni/android_os_HwBinder.cpp index 2ae4a17c00a68..95e031bd96d8b 100644 --- a/core/jni/android_os_HwBinder.cpp +++ b/core/jni/android_os_HwBinder.cpp @@ -242,9 +242,19 @@ static void JHwBinder_native_registerService( using android::hidl::manager::V1_0::IServiceManager; sp binder = JHwBinder::GetNativeContext(env, thiz); + /* TODO(b/33440494) this is not right */ sp base = new hidl::base::V1_0::BpBase(binder); - bool ok = hardware::defaultServiceManager()->add( + + auto manager = hardware::defaultServiceManager(); + + if (manager == nullptr) { + LOG(ERROR) << "Could not get hwservicemanager."; + signalExceptionForError(env, UNKNOWN_ERROR); + return; + } + + bool ok = manager->add( interfaceChain, serviceName, base); @@ -289,8 +299,16 @@ static jobject JHwBinder_native_getService( << serviceName << "'"; + auto manager = hardware::defaultServiceManager(); + + if (manager == nullptr) { + LOG(ERROR) << "Could not get hwservicemanager."; + signalExceptionForError(env, UNKNOWN_ERROR); + return NULL; + } + sp service; - hardware::defaultServiceManager()->get( + manager->get( ifaceName, serviceName, [&service](sp out) {