network_manager: Explicitly capture references in cb
We were accidentally capturing a reference to a stack variable and not
guaranteeing that we have an unmoving reference to the object being
referenced in the callback.
Change-Id: Ib16d264a5a1170ac6d11979d32800dce90a11a33
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/network_manager.cpp b/src/network_manager.cpp
index 47a528f..5206e36 100644
--- a/src/network_manager.cpp
+++ b/src/network_manager.cpp
@@ -75,8 +75,8 @@
}
})
{
- reload.get().setCallback([&]() {
- for (auto& hook : reloadPreHooks)
+ reload.get().setCallback([self = stdplus::PinnedRef(*this)]() {
+ for (auto& hook : self.get().reloadPreHooks)
{
try
{
@@ -88,10 +88,11 @@
"ERROR", ex);
}
}
- reloadPreHooks.clear();
+ self.get().reloadPreHooks.clear();
try
{
- bus.get()
+ self.get()
+ .bus.get()
.new_method_call("org.freedesktop.network1",
"/org/freedesktop/network1",
"org.freedesktop.network1.Manager", "Reload")
@@ -101,9 +102,9 @@
catch (const sdbusplus::exception_t& ex)
{
lg2::error("Failed to reload configuration: {ERROR}", "ERROR", ex);
- reloadPostHooks.clear();
+ self.get().reloadPostHooks.clear();
}
- for (auto& hook : reloadPostHooks)
+ for (auto& hook : self.get().reloadPostHooks)
{
try
{
@@ -115,7 +116,7 @@
"ERROR", ex);
}
}
- reloadPostHooks.clear();
+ self.get().reloadPostHooks.clear();
});
std::vector<
std::tuple<int32_t, std::string, sdbusplus::message::object_path>>