summaryrefslogtreecommitdiffstats
path: root/chassis_state_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chassis_state_manager.cpp')
-rw-r--r--chassis_state_manager.cpp61
1 files changed, 40 insertions, 21 deletions
diff --git a/chassis_state_manager.cpp b/chassis_state_manager.cpp
index f333254..03dd176 100644
--- a/chassis_state_manager.cpp
+++ b/chassis_state_manager.cpp
@@ -67,33 +67,52 @@ void Chassis::determineInitialState()
"org.freedesktop.DBus.Properties", "Get");
method.append("org.openbmc.control.Power", "pgood");
- auto reply = this->bus.call(method);
- if (reply.is_method_error())
- {
- log<level::ERR>("Error in bus call - could not get initial pgood");
- goto fail;
- }
-
try
{
- reply.read(pgood);
+ auto reply = this->bus.call(method);
+ if (reply.is_method_error())
+ {
+ log<level::ERR>(
+ "Error in response message - could not get initial pgood");
+ goto fail;
+ }
+
+ try
+ {
+ reply.read(pgood);
+ }
+ catch (const SdBusError& e)
+ {
+ log<level::ERR>("Error in bus response - bad encoding of pgood",
+ entry("ERROR=%s", e.what()),
+ entry("REPLY_SIG=%s", reply.get_signature()));
+ goto fail;
+ }
+
+ if (pgood == 1)
+ {
+ log<level::INFO>("Initial Chassis State will be On",
+ entry("CHASSIS_CURRENT_POWER_STATE=%s",
+ convertForMessage(PowerState::On).c_str()));
+ server::Chassis::currentPowerState(PowerState::On);
+ server::Chassis::requestedPowerTransition(Transition::On);
+ return;
+ }
}
catch (const SdBusError& e)
{
- log<level::ERR>("Error in bus response - bad encoding of pgood",
- entry("ERROR=%s", e.what()),
- entry("REPLY_SIG=%s", reply.get_signature()));
- goto fail;
- }
+ // It's acceptable for the pgood state service to not be available
+ // since it will notify us of the pgood state when it comes up.
+ if (e.name() != nullptr &&
+ strcmp("org.freedesktop.DBus.Error.ServiceUnknown", e.name()) == 0)
+ {
+ goto fail;
+ }
- if (pgood == 1)
- {
- log<level::INFO>("Initial Chassis State will be On",
- entry("CHASSIS_CURRENT_POWER_STATE=%s",
- convertForMessage(PowerState::On).c_str()));
- server::Chassis::currentPowerState(PowerState::On);
- server::Chassis::requestedPowerTransition(Transition::On);
- return;
+ // Only log for unexpected error types.
+ log<level::ERR>("Error performing call to get pgood",
+ entry("ERROR=%s", e.what()));
+ goto fail;
}
fail:
OpenPOWER on IntegriCloud