control: Store signal packages as a reference
Switch from storing signal package data from a pointer to a reference.
Change-Id: I2d9051273e54709c0c8abd0c72f513bac36a2c89
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index e3de8dc..7202471 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -526,9 +526,9 @@
}
void Manager::handleSignal(sdbusplus::message::message& msg,
- const std::vector<SignalPkg>* pkgs)
+ const std::vector<SignalPkg>& pkgs)
{
- for (auto& pkg : *pkgs)
+ for (auto& pkg : pkgs)
{
// Handle the signal callback and only run the actions if the handler
// updated the cache for the given SignalObject
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index df6edb3..5e5b33c 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -101,12 +101,11 @@
/**
* Data associated to a subscribed signal
* Tuple constructed of:
- * std::unique_ptr<std::vector<SignalPkg>> =
- * Pointer to the signal's packages
+ * std::vector<SignalPkg> = List of the signal's packages
* std::unique_ptr<sdbusplus::server::match::match> =
* Pointer to match holding the subscription to a signal
*/
-using SignalData = std::tuple<std::unique_ptr<std::vector<SignalPkg>>,
+using SignalData = std::tuple<std::vector<SignalPkg>,
std::unique_ptr<sdbusplus::server::match::match>>;
/**
@@ -402,7 +401,7 @@
* @param[in] pkgs - Signal packages associated to the signal being handled
*/
void handleSignal(sdbusplus::message::message& msg,
- const std::vector<SignalPkg>* pkgs);
+ const std::vector<SignalPkg>& pkgs);
/**
* @brief Get the sdbusplus bus object
diff --git a/control/json/triggers/signal.cpp b/control/json/triggers/signal.cpp
index 28b2781..8b66c5f 100644
--- a/control/json/triggers/signal.cpp
+++ b/control/json/triggers/signal.cpp
@@ -50,8 +50,8 @@
{
// Signal subscription doesnt exist, add signal package and subscribe
std::vector<SignalPkg> pkgs = {signalPkg};
- std::unique_ptr<std::vector<SignalPkg>> dataPkgs =
- std::make_unique<std::vector<SignalPkg>>(std::move(pkgs));
+ std::vector<SignalPkg> dataPkgs =
+ std::vector<SignalPkg>(std::move(pkgs));
std::unique_ptr<sdbusplus::server::match::match> ptrMatch = nullptr;
// TODO(ibm-openbmc/#3195) - Filter signal subscriptions to objects
// owned by fan control?
@@ -61,7 +61,7 @@
ptrMatch = std::make_unique<sdbusplus::server::match::match>(
mgr->getBus(), match.c_str(),
std::bind(std::mem_fn(&Manager::handleSignal), &(*mgr),
- std::placeholders::_1, dataPkgs.get()));
+ std::placeholders::_1, dataPkgs));
}
signalData.emplace_back(std::move(dataPkgs), std::move(ptrMatch));
}
@@ -69,9 +69,8 @@
{
// Signal subscription already exists
// Only a single signal data entry tied to each match is supported
- auto& pkgs = std::get<std::unique_ptr<std::vector<SignalPkg>>>(
- signalData.front());
- for (auto& pkg : *pkgs)
+ auto& pkgs = std::get<std::vector<SignalPkg>>(signalData.front());
+ for (auto& pkg : pkgs)
{
if (isSameSig(pkg))
{
@@ -85,7 +84,7 @@
else
{
// Expected signal differs, add signal package
- (*pkgs).emplace_back(std::move(signalPkg));
+ pkgs.emplace_back(std::move(signalPkg));
}
}
}