Merge "configstore-utils: add feature to cache service handles" am: 03b02609ff
am: fbb8bb0671
Change-Id: Ic1cd2c7010fd122e0939bb993bc4211010ff756f
diff --git a/configstore/utils/include/configstore/Utils.h b/configstore/utils/include/configstore/Utils.h
index 862e812..ee85549 100644
--- a/configstore/utils/include/configstore/Utils.h
+++ b/configstore/utils/include/configstore/Utils.h
@@ -42,6 +42,15 @@
using ::android::hardware::configstore::V1_0::OptionalUInt64;
using ::android::hardware::configstore::V1_0::OptionalString;
+// a function to retrieve and cache the service handle
+// for a particular interface
+template <typename I>
+sp<I> getService() {
+ // static initializer used for synchronizations
+ static sp<I> configs = I::getService();
+ return configs;
+}
+
// arguments V: type for the value (i.e., OptionalXXX)
// I: interface class name
// func: member function pointer
@@ -49,9 +58,10 @@
(std::function<void(const V&)>)>
decltype(V::value) get(const decltype(V::value) &defValue) {
using namespace android::hardware::details;
+ // static initializer used for synchronizations
auto getHelper = []()->V {
V ret;
- sp<I> configs = I::getService();
+ sp<I> configs = getService<I>();
if (!configs.get()) {
// fallback to the default value