diff options
author | William A. Kennington III <wak@google.com> | 2018-04-27 14:31:51 -0700 |
---|---|---|
committer | Emily Shaffer <emilyshaffer@google.com> | 2018-05-22 18:22:20 +0000 |
commit | 2ecf51204690d99477352188e2b83def7a7c1f1a (patch) | |
tree | 219f098a1e6ca8a81cb5dcd18742e83075a6fada /app/watchdog_service.cpp | |
parent | 4b017a9b8728d19880d8d0de9cb994d7c0273769 (diff) | |
download | phosphor-host-ipmid-2ecf51204690d99477352188e2b83def7a7c1f1a.tar.gz phosphor-host-ipmid-2ecf51204690d99477352188e2b83def7a7c1f1a.zip |
watchdog: Get only the initialized property during reset
Since we switched to resetting the watchdog with a built-in method, we
are only using a single property from the watchdog. Instead of fetching
all the properties and reading just the initialized one, only request
the initialized property from the watchdog.
Change-Id: I5e29b5100629e1ce23f352b0b749a434cd1ab793
Signed-off-by: William A. Kennington III <wak@google.com>
Diffstat (limited to 'app/watchdog_service.cpp')
-rw-r--r-- | app/watchdog_service.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/app/watchdog_service.cpp b/app/watchdog_service.cpp index 26962dc..898cf77 100644 --- a/app/watchdog_service.cpp +++ b/app/watchdog_service.cpp @@ -85,6 +85,30 @@ WatchdogService::Properties WatchdogService::getProperties() } template <typename T> +T WatchdogService::getProperty(const std::string& key) +{ + bool wasValid = wd_service.isValid(bus); + auto request = wd_service.newMethodCall(bus, prop_intf, "Get"); + request.append(wd_intf, key); + auto response = bus.call(request); + if (response.is_method_error()) + { + wd_service.invalidate(); + if (wasValid) + { + // Retry the request once in case the cached service was stale + return getProperty<T>(key); + } + log<level::ERR>("WatchdogService: Method error getting property", + entry("PROPERTY=%s", key.c_str())); + elog<InternalFailure>(); + } + variant<T> value; + response.read(value); + return get<T>(value); +} + +template <typename T> void WatchdogService::setProperty(const std::string& key, const T& val) { bool wasValid = wd_service.isValid(bus); @@ -105,6 +129,11 @@ void WatchdogService::setProperty(const std::string& key, const T& val) } } +bool WatchdogService::getInitialized() +{ + return getProperty<bool>("Initialized"); +} + void WatchdogService::setInitialized(bool initialized) { setProperty("Initialized", initialized); |