diff --git a/configstore/utils/include/configstore/Utils.h b/configstore/utils/include/configstore/Utils.h index 862e81212e..ee8554928d 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::OptionalInt64; 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 +sp getService() { + // static initializer used for synchronizations + static sp 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 @@ template (I::* func) (std::function)> 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 configs = I::getService(); + sp configs = getService(); if (!configs.get()) { // fallback to the default value