netipmid: use shared_ptr on messages instead of unique_ptr+references
Messages were being created and held by unique_ptr objects and then
shared via reference. This is dangerous and sidesteps the whole point of
a unique_ptr, which is to enforce single ownership. This replaces the
usage with a shared_ptr, which denotes shared ownership.
Change-Id: I19ed2693f5a0f5ce47d720ed255fa05bdf3844f8
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/message_handler.hpp b/message_handler.hpp
index 063f8d2..3c99660 100644
--- a/message_handler.hpp
+++ b/message_handler.hpp
@@ -6,6 +6,7 @@
#include "sol/console_buffer.hpp"
#include <iostream>
+#include <memory>
#include <numeric>
namespace message
@@ -38,7 +39,7 @@
* @return IPMI Message on success and nullptr on failure
*
*/
- std::unique_ptr<Message> receive();
+ std::shared_ptr<Message> receive();
/**
* @brief Process the incoming IPMI message
@@ -51,7 +52,7 @@
*
* @return Outgoing message on success and nullptr on failure
*/
- std::unique_ptr<Message> executeCommand(Message& inMessage);
+ std::shared_ptr<Message> executeCommand(std::shared_ptr<Message> inMessage);
/** @brief Send the outgoing message
*
@@ -60,7 +61,7 @@
*
* @param[in] outMessage - Outgoing Message
*/
- void send(Message& outMessage);
+ void send(std::shared_ptr<Message> outMessage);
/** @brief Set socket channel in session object */
void setChannelInSession() const;
@@ -109,10 +110,10 @@
* @return Outgoing message on success and nullptr on failure
*/
template <PayloadType T>
- std::unique_ptr<Message> createResponse(std::vector<uint8_t>& output,
- Message& inMessage)
+ std::shared_ptr<Message> createResponse(std::vector<uint8_t>& output,
+ std::shared_ptr<Message> inMessage)
{
- auto outMessage = std::make_unique<Message>();
+ auto outMessage = std::make_shared<Message>();
outMessage->payloadType = T;
outMessage->payload = output;
return outMessage;
@@ -125,7 +126,7 @@
*
* @return Command ID in the incoming message
*/
- uint32_t getCommand(Message& message);
+ uint32_t getCommand(std::shared_ptr<Message> message);
/**
* @brief Calculate 8 bit 2's complement checksum