From 6384e3239a6567db6e9b0df73f77193768c5a86d Mon Sep 17 00:00:00 2001 From: Nan Zhou Date: Thu, 23 Jun 2022 22:28:25 +0000 Subject: dbus_singleton: use stack variable and extern Currently, the |systemBus| connection is a static variable declared in headers. This has a problem that every translation unit will keep its own copy. It's not a problem today because there's only one translation unit "webserver_main.cpp.o". This issue was brounght up in https://gerrit.openbmc.org/c/openbmc/bmcweb/+/54758 Actually, the |systemBus| doesn't need to be a singleton. It can just be a stack variable, which is normally more efficient than heap variables. To keep minimum changes treeside, this commits keeps the existing |systemBus| variable as an external variable. It is defined in its own translation unit. It is initialized in the main translation unit. Reference: 1. Extern https://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files Tested: 1. Romulus QEMU robot Redfish test passed; 2. Start and restart service on real hardware, no issues; 3. No new validator failures 4. Code compies Signed-off-by: Nan Zhou Change-Id: I03b387bd5f218a86c9d1765415a46e3c2ad83ff9 --- include/dbus_singleton.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'include/dbus_singleton.hpp') diff --git a/include/dbus_singleton.hpp b/include/dbus_singleton.hpp index 63c88b7544..283021641b 100644 --- a/include/dbus_singleton.hpp +++ b/include/dbus_singleton.hpp @@ -1,11 +1,15 @@ #pragma once +#include #include namespace crow { namespace connections { -static std::shared_ptr systemBus; + +// Initialze before using! +// Please see webserver_main for the example how this variable is initialzed, +extern sdbusplus::asio::connection* systemBus; } // namespace connections } // namespace crow -- cgit v1.2.3