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";