Fix race conditions for lazy services.
Add hidlFqName/hidlName to registerClientCallbacks to make it more
explicit, provide better errors, and for general sanity.
Add tryUnregister so that a service can unregister itself before
shutting down.
Bug: 123318663
Test: hidl_test, manual
Change-Id: I3ee26ba96dbc9732e72aaa16281abc47ce6a02c9
Merged-In: I3ee26ba96dbc9732e72aaa16281abc47ce6a02c9
diff --git a/transport/HidlLazyUtils.cpp b/transport/HidlLazyUtils.cpp
index 9223af6..429ab8b 100644
--- a/transport/HidlLazyUtils.cpp
+++ b/transport/HidlLazyUtils.cpp
@@ -70,10 +70,10 @@
Return<void> ClientCounterCallback::onClients(const sp<::android::hidl::base::V1_0::IBase>& service,
bool clients) {
if (clients) {
- LOG(INFO) << "HAL " << service->descriptor << " connected.";
+ LOG(INFO) << "HAL " << getDescriptor(service.get()) << " connected.";
mNumConnectedServices++;
} else {
- LOG(INFO) << "HAL " << service->descriptor << " disconnected.";
+ LOG(INFO) << "HAL " << getDescriptor(service.get()) << " disconnected.";
mNumConnectedServices--;
}
LOG(INFO) << "HAL has " << mNumConnectedServices << " (of " << mNumRegisteredServices
@@ -89,11 +89,12 @@
status_t LazyServiceRegistrarImpl::registerService(
const sp<::android::hidl::base::V1_0::IBase>& service, const std::string& name) {
static auto manager = hardware::defaultServiceManager1_2();
- LOG(INFO) << "Registering HAL: " << service->descriptor << " with name: " << name;
+ LOG(INFO) << "Registering HAL: " << getDescriptor(service.get()) << " with name: " << name;
status_t res = android::hardware::details::registerAsServiceInternal(service, name);
if (res == android::OK) {
mClientCallback->incServiceCounter();
- bool ret = manager->registerClientCallback(service, mClientCallback);
+ bool ret = manager->registerClientCallback(getDescriptor(service.get()), name, service,
+ mClientCallback);
if (!ret) {
res = android::INVALID_OPERATION;
LOG(ERROR) << "Failed to add client callback";