diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/watchdog_service.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/app/watchdog_service.cpp b/app/watchdog_service.cpp index d3fa3ad..cf386b8 100644 --- a/app/watchdog_service.cpp +++ b/app/watchdog_service.cpp @@ -25,12 +25,18 @@ WatchdogService::WatchdogService() WatchdogService::Properties WatchdogService::getProperties() { + bool wasValid = wd_service.isValid(bus); auto request = wd_service.newMethodCall(bus, prop_intf, "GetAll"); request.append(wd_intf); 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 getProperties(); + } throw std::runtime_error("Failed to get watchdog properties"); } @@ -49,12 +55,18 @@ WatchdogService::Properties WatchdogService::getProperties() template <typename T> void WatchdogService::setProperty(const std::string& key, const T& val) { + bool wasValid = wd_service.isValid(bus); auto request = wd_service.newMethodCall(bus, prop_intf, "Set"); request.append(wd_intf, key, variant<T>(val)); 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 setProperty(key, val); + } throw std::runtime_error(std::string("Failed to set property: ") + key); } } |