From 86be476bfb6acfd413afff449a357123639eb29e Mon Sep 17 00:00:00 2001 From: Matthew Barth Date: Tue, 17 Jul 2018 10:51:36 -0500 Subject: Handle SdBusError exceptions When the SdBusError exception was added, all sdbusplus::bus::call function use required this exception be handled appropriately in each case where it could occur. These changes are the result of handling the possibility of this exception correctly within the fan applications. Change-Id: I6ecef3008412b299a4fedbb13716f656cfbf1a90 Signed-off-by: Matthew Barth --- control/fan.cpp | 26 +++++++++++++++++++------- control/functor.hpp | 7 ++++++- sdbusplus.hpp | 15 ++++++++++----- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/control/fan.cpp b/control/fan.cpp index d4303cf..c86186f 100644 --- a/control/fan.cpp +++ b/control/fan.cpp @@ -65,13 +65,25 @@ void Fan::setSpeed(uint64_t speed) for (auto& sensor : _sensors) { auto value = speed; - util::SDBusPlus::setProperty( - _bus, - sensor.second, - sensor.first, - _interface, - FAN_TARGET_PROPERTY, - std::move(value)); + try + { + util::SDBusPlus::setProperty( + _bus, + sensor.second, + sensor.first, + _interface, + FAN_TARGET_PROPERTY, + std::move(value)); + } + catch (const sdbusplus::exception::SdBusError&) + { + throw util::DBusPropertyError{ + "DBus set property failed", + sensor.second, + sensor.first, + _interface, + FAN_TARGET_PROPERTY}; + } } _targetSpeed = speed; diff --git a/control/functor.hpp b/control/functor.hpp index 17ae3af..e86bae7 100644 --- a/control/functor.hpp +++ b/control/functor.hpp @@ -113,7 +113,12 @@ struct PropertyChanged _property); _handler(zone, std::forward(val)); } - catch (const util::DBusError& e) + catch (const sdbusplus::exception::SdBusError&) + { + // Property will not be used unless a property changed + // signal message is received for this property. + } + catch (const util::DBusError&) { // Property will not be used unless a property changed // signal message is received for this property. diff --git a/sdbusplus.hpp b/sdbusplus.hpp index 3a6cd65..41c7fe2 100644 --- a/sdbusplus.hpp +++ b/sdbusplus.hpp @@ -149,14 +149,19 @@ class SDBusPlus interface.c_str(), method.c_str()); reqMsg.append(std::forward(args)...); - auto respMsg = bus.call(reqMsg); - - if (respMsg.is_method_error()) + try + { + auto respMsg = bus.call(reqMsg); + if (respMsg.is_method_error()) + { + throw DBusMethodError{busName, path, interface, method}; + } + return respMsg; + } + catch (const sdbusplus::exception::SdBusError&) { throw DBusMethodError{busName, path, interface, method}; } - - return respMsg; } /** @brief Invoke a method. */ -- cgit v1.2.1