netipmid: use std::shared_ptr instead of weak_ptr/lock
All of the instances of getSession and startSession were assigning the
result to a local shared_ptr via lock on the weak_ptr. It doesn't make
sense to demote the shared_ptr (from the sessionsMap) to a weak_ptr via
the return, only to promote to a shared_ptr again via lock.
Tested-by: running ipmitool -H a.b.c.d -P 0penBmc -I lanplus mc info
Sessions start and stop, same as before.
Change-Id: Ic10779285891d73ee51115f16ed0000b38d1c52a
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/command/open_session.cpp b/command/open_session.cpp
index b41eefa..b48b7e9 100644
--- a/command/open_session.cpp
+++ b/command/open_session.cpp
@@ -50,16 +50,15 @@
{
// Start an IPMI session
session =
- (std::get<session::Manager&>(singletonPool)
- .startSession(
- endian::from_ipmi<>(request->remoteConsoleSessionID),
- static_cast<session::Privilege>(request->maxPrivLevel),
- static_cast<cipher::rakp_auth::Algorithms>(
- request->authAlgo),
- static_cast<cipher::integrity::Algorithms>(
- request->intAlgo),
- static_cast<cipher::crypt::Algorithms>(request->confAlgo)))
- .lock();
+ std::get<session::Manager&>(singletonPool)
+ .startSession(
+ endian::from_ipmi<>(request->remoteConsoleSessionID),
+ static_cast<session::Privilege>(request->maxPrivLevel),
+ static_cast<cipher::rakp_auth::Algorithms>(
+ request->authAlgo),
+ static_cast<cipher::integrity::Algorithms>(
+ request->intAlgo),
+ static_cast<cipher::crypt::Algorithms>(request->confAlgo));
}
catch (std::exception& e)
{
diff --git a/command/payload_cmds.cpp b/command/payload_cmds.cpp
index 8030b92..2e8ac6f 100644
--- a/command/payload_cmds.cpp
+++ b/command/payload_cmds.cpp
@@ -47,9 +47,8 @@
return outPayload;
}
- auto session = (std::get<session::Manager&>(singletonPool)
- .getSession(handler.sessionID))
- .lock();
+ auto session = std::get<session::Manager&>(singletonPool)
+ .getSession(handler.sessionID);
if (!request->encryption && session->isCryptAlgoEnabled())
{
diff --git a/command/rakp12.cpp b/command/rakp12.cpp
index b0aad87..b4842b2 100644
--- a/command/rakp12.cpp
+++ b/command/rakp12.cpp
@@ -35,10 +35,9 @@
std::shared_ptr<session::Session> session;
try
{
- session = (std::get<session::Manager&>(singletonPool)
- .getSession(
- endian::from_ipmi(request->managedSystemSessionID)))
- .lock();
+ session =
+ std::get<session::Manager&>(singletonPool)
+ .getSession(endian::from_ipmi(request->managedSystemSessionID));
}
catch (std::exception& e)
{
diff --git a/command/rakp34.cpp b/command/rakp34.cpp
index 76236d5..84c90fc 100644
--- a/command/rakp34.cpp
+++ b/command/rakp34.cpp
@@ -16,8 +16,7 @@
void applyIntegrityAlgo(const uint32_t bmcSessionID)
{
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(bmcSessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(bmcSessionID);
auto authAlgo = session->getAuthAlgo();
@@ -45,8 +44,7 @@
void applyCryptAlgo(const uint32_t bmcSessionID)
{
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(bmcSessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(bmcSessionID);
auto authAlgo = session->getAuthAlgo();
@@ -96,10 +94,9 @@
std::shared_ptr<session::Session> session;
try
{
- session = (std::get<session::Manager&>(singletonPool)
- .getSession(
- endian::from_ipmi(request->managedSystemSessionID)))
- .lock();
+ session =
+ std::get<session::Manager&>(singletonPool)
+ .getSession(endian::from_ipmi(request->managedSystemSessionID));
}
catch (std::exception& e)
{
diff --git a/command/session_cmds.cpp b/command/session_cmds.cpp
index fb2d074..d363c1e 100644
--- a/command/session_cmds.cpp
+++ b/command/session_cmds.cpp
@@ -23,9 +23,8 @@
response->completionCode = IPMI_CC_OK;
uint8_t reqPrivilegeLevel = request->reqPrivLevel;
- auto session = (std::get<session::Manager&>(singletonPool)
- .getSession(handler.sessionID))
- .lock();
+ auto session = std::get<session::Manager&>(singletonPool)
+ .getSession(handler.sessionID);
if (reqPrivilegeLevel == 0) // Just return present privilege level
{
diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp
index fb6f19e..a8fa410 100644
--- a/command/sol_cmds.cpp
+++ b/command/sol_cmds.cpp
@@ -57,8 +57,7 @@
request->minorVersion = MINOR_VERSION;
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(sessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(sessionID);
message::Handler msgHandler(session->channelPtr, sessionID);
diff --git a/message_handler.cpp b/message_handler.cpp
index 62855a9..c5d5d4e 100644
--- a/message_handler.cpp
+++ b/message_handler.cpp
@@ -35,9 +35,8 @@
std::unique_ptr<Message> message;
std::tie(message, sessionHeader) = parser::unflatten(packet);
- auto session = (std::get<session::Manager&>(singletonPool)
- .getSession(message->bmcSessionID))
- .lock();
+ auto session = std::get<session::Manager&>(singletonPool)
+ .getSession(message->bmcSessionID);
sessionID = message->bmcSessionID;
message->rcSessionID = session->getRCSessionID();
@@ -166,8 +165,7 @@
void Handler::send(Message& outMessage)
{
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(sessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(sessionID);
// Flatten the packet
auto packet = parser::flatten(outMessage, sessionHeader, *session);
@@ -183,8 +181,7 @@
void Handler::setChannelInSession() const
{
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(sessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(sessionID);
session->channelPtr = channel;
}
@@ -194,8 +191,7 @@
Message outMessage;
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(sessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(sessionID);
outMessage.payloadType = PayloadType::SOL;
outMessage.payload = input;
@@ -213,8 +209,7 @@
Message outMessage;
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(sessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(sessionID);
outMessage.payloadType = PayloadType::IPMI;
outMessage.isPacketEncrypted = session->isCryptAlgoEnabled();
diff --git a/message_parsers.cpp b/message_parsers.cpp
index 695b5b7..7497747 100644
--- a/message_parsers.cpp
+++ b/message_parsers.cpp
@@ -280,9 +280,8 @@
return false;
}
- auto session = (std::get<session::Manager&>(singletonPool)
- .getSession(message.bmcSessionID))
- .lock();
+ auto session = std::get<session::Manager&>(singletonPool)
+ .getSession(message.bmcSessionID);
auto integrityAlgo = session->getIntegrityAlgo();
@@ -322,9 +321,8 @@
trailer->padLength = paddingLen;
trailer->nextHeader = parser::RMCP_MESSAGE_CLASS_IPMI;
- auto session = (std::get<session::Manager&>(singletonPool)
- .getSession(message.bmcSessionID))
- .lock();
+ auto session = std::get<session::Manager&>(singletonPool)
+ .getSession(message.bmcSessionID);
auto integrityData =
session->getIntegrityAlgo()->generateIntegrityData(packet);
@@ -335,9 +333,8 @@
std::vector<uint8_t> decryptPayload(const std::vector<uint8_t>& packet,
const Message& message, size_t payloadLen)
{
- auto session = (std::get<session::Manager&>(singletonPool)
- .getSession(message.bmcSessionID))
- .lock();
+ auto session = std::get<session::Manager&>(singletonPool)
+ .getSession(message.bmcSessionID);
return session->getCryptAlgo()->decryptPayload(
packet, sizeof(SessionHeader_t), payloadLen);
@@ -345,9 +342,8 @@
std::vector<uint8_t> encryptPayload(Message& message)
{
- auto session = (std::get<session::Manager&>(singletonPool)
- .getSession(message.bmcSessionID))
- .lock();
+ auto session = std::get<session::Manager&>(singletonPool)
+ .getSession(message.bmcSessionID);
return session->getCryptAlgo()->encryptPayload(message.payload);
}
diff --git a/sessions_manager.cpp b/sessions_manager.cpp
index 10c2764..bf7ff34 100644
--- a/sessions_manager.cpp
+++ b/sessions_manager.cpp
@@ -24,7 +24,7 @@
std::srand(std::time(0));
}
-std::weak_ptr<Session>
+std::shared_ptr<Session>
Manager::startSession(SessionID remoteConsoleSessID, Privilege priv,
cipher::rakp_auth::Algorithms authAlgo,
cipher::integrity::Algorithms intAlgo,
@@ -120,8 +120,8 @@
}
}
-std::weak_ptr<Session> Manager::getSession(SessionID sessionID,
- RetrieveOption option)
+std::shared_ptr<Session> Manager::getSession(SessionID sessionID,
+ RetrieveOption option)
{
switch (option)
{
diff --git a/sessions_manager.hpp b/sessions_manager.hpp
index cf28238..251ca96 100644
--- a/sessions_manager.hpp
+++ b/sessions_manager.hpp
@@ -53,11 +53,11 @@
* @return session handle on success and nullptr on failure
*
*/
- std::weak_ptr<Session> startSession(SessionID remoteConsoleSessID,
- Privilege priv,
- cipher::rakp_auth::Algorithms authAlgo,
- cipher::integrity::Algorithms intAlgo,
- cipher::crypt::Algorithms cryptAlgo);
+ std::shared_ptr<Session>
+ startSession(SessionID remoteConsoleSessID, Privilege priv,
+ cipher::rakp_auth::Algorithms authAlgo,
+ cipher::integrity::Algorithms intAlgo,
+ cipher::crypt::Algorithms cryptAlgo);
/**
* @brief Stop IPMI Session
@@ -79,7 +79,7 @@
* @return session handle on success and nullptr on failure
*
*/
- std::weak_ptr<Session>
+ std::shared_ptr<Session>
getSession(SessionID sessionID,
RetrieveOption option = RetrieveOption::BMC_SESSION_ID);
diff --git a/sol/sol_context.cpp b/sol/sol_context.cpp
index 7329ed2..fffb66f 100644
--- a/sol/sol_context.cpp
+++ b/sol/sol_context.cpp
@@ -205,8 +205,7 @@
void Context::sendPayload(const std::vector<uint8_t>& out) const
{
auto session =
- (std::get<session::Manager&>(singletonPool).getSession(sessionID))
- .lock();
+ std::get<session::Manager&>(singletonPool).getSession(sessionID);
message::Handler msgHandler(session->channelPtr, sessionID);