Prepare for android.hidl.allocator deprecation am: 4ed17b5f7c

Original change: https://android-review.googlesource.com/c/platform/system/libhidl/+/2853457

Change-Id: If22c9f7e185fe1f6a1bdd1ffac90b9fc2c75dc1f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/transport/allocator/1.0/default/android.hidl.allocator@1.0-service.rc b/transport/allocator/1.0/default/android.hidl.allocator@1.0-service.rc
index c648aff..a0ffbad 100644
--- a/transport/allocator/1.0/default/android.hidl.allocator@1.0-service.rc
+++ b/transport/allocator/1.0/default/android.hidl.allocator@1.0-service.rc
@@ -2,3 +2,6 @@
     class hal
     user system
     group system
+
+on property:hidl_memory.disabled=true
+   stop hidl_memory
diff --git a/transport/allocator/1.0/default/service.cpp b/transport/allocator/1.0/default/service.cpp
index 63babd3..d918aae 100644
--- a/transport/allocator/1.0/default/service.cpp
+++ b/transport/allocator/1.0/default/service.cpp
@@ -4,24 +4,43 @@
 
 #include <android-base/logging.h>
 #include <android/hidl/allocator/1.0/IAllocator.h>
+#include <android/hidl/manager/1.2/IServiceManager.h>
+#include <cutils/properties.h>
 #include <hidl/HidlTransportSupport.h>
 
+using android::sp;
+using android::status_t;
 using android::hardware::configureRpcThreadpool;
 using android::hardware::joinRpcThreadpool;
 using android::hidl::allocator::V1_0::IAllocator;
 using android::hidl::allocator::V1_0::implementation::AshmemAllocator;
-using android::sp;
-using android::status_t;
+using android::hidl::manager::V1_2::IServiceManager;
+
+static constexpr char kInstanceName[] = "ashmem";
 
 int main() {
     configureRpcThreadpool(1, true /* callerWillJoin */);
 
     sp<IAllocator> allocator = new AshmemAllocator();
 
-    status_t status = allocator->registerAsService("ashmem");
-
-    if (android::OK != status) {
-        LOG(FATAL) << "Unable to register allocator service: " << status;
+    IServiceManager::Transport transport =
+            android::hardware::defaultServiceManager1_2()->getTransport(IAllocator::descriptor,
+                                                                        kInstanceName);
+    if (transport == IServiceManager::Transport::HWBINDER) {
+        status_t status = allocator->registerAsService(kInstanceName);
+        if (android::OK != status) {
+            LOG(FATAL) << "Unable to register allocator service: " << status;
+            return -1;
+        }
+    } else {
+        LOG(INFO) << IAllocator::descriptor << "/" << kInstanceName
+                  << " is not registered in the VINTF manifest as it is deprecated.";
+        // The transport won't change at run time, so make sure we don't restart
+        int rc = property_set("hidl_memory.disabled", "true");
+        if (rc) {
+            LOG_ALWAYS_FATAL("Failed to set \"hidl_memory.disabled\" (error %d).\"", rc);
+        }
+        return 0;
     }
 
     joinRpcThreadpool();