Split defaultPassthroughServiceImplementation into reusable parts
In audio hal server it is needed to register several passthrough
services. By splitting defaultPassthroughServiceImplementation into
service registration and launching of the RPC server we can reuse
code.
Change-Id: I6a7543d9759e40997818203266661e743e76d446
diff --git a/include/hidl/LegacySupport.h b/include/hidl/LegacySupport.h
index 6e030ce..2ff1785 100644
--- a/include/hidl/LegacySupport.h
+++ b/include/hidl/LegacySupport.h
@@ -28,37 +28,55 @@
namespace hardware {
/**
- * Creates default passthrough service implementation. This method never returns.
- *
- * Return value is exit status.
+ * Registers passthrough service implementation.
*/
template<class Interface>
-int defaultPassthroughServiceImplementation(std::string name) {
+status_t registerPassthroughServiceImplementation(std::string name) {
sp<Interface> service = Interface::getService(name, true /* getStub */);
if (service == nullptr) {
- ALOGE("Could not get passthrough implementation.");
+ ALOGE("Could not get passthrough implementation for %s.", name.c_str());
return EXIT_FAILURE;
}
- LOG_FATAL_IF(service->isRemote(), "Implementation is remote!");
+ LOG_FATAL_IF(service->isRemote(), "Implementation of %s is remote!", name.c_str());
status_t status = service->registerAsService(name);
if (status == OK) {
- ALOGI("Registration complete.");
+ ALOGI("Registration complete for %s.", name.c_str());
} else {
- ALOGE("Could not register service (%d).", status);
+ ALOGE("Could not register service %s (%d).", name.c_str(), status);
}
- ProcessState::self()->setThreadPoolMaxThreadCount(0);
+ return status;
+}
+
+/**
+ * Launches the RPC threadpool. This method never returns.
+ *
+ * Return value is exit status.
+ */
+inline int launchRpcServer(size_t maxThreads) {
+ ProcessState::self()->setThreadPoolMaxThreadCount(maxThreads);
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
return 0;
}
+/**
+ * Creates default passthrough service implementation. This method never returns.
+ *
+ * Return value is exit status.
+ */
+template<class Interface>
+int defaultPassthroughServiceImplementation(std::string name) {
+ registerPassthroughServiceImplementation<Interface>(name);
+ return launchRpcServer(0);
+}
+
} // namespace hardware
} // namespace android
-#endif // ANDROID_HIDL_LEGACY_SUPPORT_H
\ No newline at end of file
+#endif // ANDROID_HIDL_LEGACY_SUPPORT_H