replace tuple-based singleton with individual singletons
The tuple-based singletons did not actually enforce singleton behavior
and the requirement of the accessor mechanism to include all of the
member types at once was starting to cause a header prerequisite
tangle. This removes the cross-dependencies and enforces actual
singletons by making a single way to access the class.
Tested: Run ipmitool to show that behavior has not changed
Change-Id: Ie966e1142363d279365b1095066380c8383e9f9b
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/command/payload_cmds.cpp b/command/payload_cmds.cpp
index bc987c5..ecb86e7 100644
--- a/command/payload_cmds.cpp
+++ b/command/payload_cmds.cpp
@@ -1,6 +1,6 @@
#include "payload_cmds.hpp"
-#include "main.hpp"
+#include "sessions_manager.hpp"
#include "sol/sol_manager.hpp"
#include "sol_cmds.hpp"
@@ -41,10 +41,9 @@
return outPayload;
}
- std::get<sol::Manager&>(singletonPool)
- .updateSOLParameter(ipmi::convertCurrentChannelNum(
- ipmi::currentChNum, getInterfaceIndex()));
- if (!std::get<sol::Manager&>(singletonPool).enable)
+ sol::Manager::get().updateSOLParameter(ipmi::convertCurrentChannelNum(
+ ipmi::currentChNum, getInterfaceIndex()));
+ if (!sol::Manager::get().enable)
{
response->completionCode = IPMI_CC_PAYLOAD_TYPE_DISABLED;
return outPayload;
@@ -57,8 +56,7 @@
return outPayload;
}
- auto session = std::get<session::Manager&>(singletonPool)
- .getSession(handler.sessionID);
+ auto session = session::Manager::get().getSession(handler.sessionID);
if (!request->encryption && session->isCryptAlgoEnabled())
{
@@ -78,8 +76,7 @@
return outPayload;
}
- auto status = std::get<sol::Manager&>(singletonPool)
- .isPayloadActive(request->payloadInstance);
+ auto status = sol::Manager::get().isPayloadActive(request->payloadInstance);
if (status)
{
response->completionCode = IPMI_CC_PAYLOAD_ALREADY_ACTIVE;
@@ -92,8 +89,8 @@
// Start the SOL payload
try
{
- std::get<sol::Manager&>(singletonPool)
- .startPayloadInstance(request->payloadInstance, handler.sessionID);
+ sol::Manager::get().startPayloadInstance(request->payloadInstance,
+ handler.sessionID);
}
catch (std::exception& e)
{
@@ -142,8 +139,7 @@
return outPayload;
}
- auto status = std::get<sol::Manager&>(singletonPool)
- .isPayloadActive(request->payloadInstance);
+ auto status = sol::Manager::get().isPayloadActive(request->payloadInstance);
if (!status)
{
response->completionCode = IPMI_CC_PAYLOAD_DEACTIVATED;
@@ -152,12 +148,11 @@
try
{
- auto& context = std::get<sol::Manager&>(singletonPool)
- .getContext(request->payloadInstance);
+ auto& context =
+ sol::Manager::get().getContext(request->payloadInstance);
auto sessionID = context.sessionID;
- std::get<sol::Manager&>(singletonPool)
- .stopPayloadInstance(request->payloadInstance);
+ sol::Manager::get().stopPayloadInstance(request->payloadInstance);
try
{
@@ -213,8 +208,7 @@
response->capacity = maxSolPayloadInstances;
// Currently we support only one SOL session
- response->instance1 =
- std::get<sol::Manager&>(singletonPool).isPayloadActive(1);
+ response->instance1 = sol::Manager::get().isPayloadActive(1);
return outPayload;
}
@@ -244,13 +238,12 @@
response->completionCode = IPMI_CC_INVALID_FIELD_REQUEST;
return outPayload;
}
- auto status = std::get<sol::Manager&>(singletonPool)
- .isPayloadActive(request->payloadInstance);
+ auto status = sol::Manager::get().isPayloadActive(request->payloadInstance);
if (status)
{
- auto& context = std::get<sol::Manager&>(singletonPool)
- .getContext(request->payloadInstance);
+ auto& context =
+ sol::Manager::get().getContext(request->payloadInstance);
response->sessionID = context.sessionID;
}
else