diff options
author | Nan Zhou <nanzhoumails@gmail.com> | 2022-06-24 01:28:25 +0300 |
---|---|---|
committer | Ed Tanous <ed@tanous.net> | 2022-07-07 21:55:31 +0300 |
commit | 6384e3239a6567db6e9b0df73f77193768c5a86d (patch) | |
tree | 46021e320115bfae86f7886e1895bd8fb6f49793 /include/dbus_singleton.hpp | |
parent | 16a5535f15af187b56d4c927aa9dec3ef8f66af4 (diff) | |
download | bmcweb-6384e3239a6567db6e9b0df73f77193768c5a86d.tar.xz |
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 <nanzhoumails@gmail.com>
Change-Id: I03b387bd5f218a86c9d1765415a46e3c2ad83ff9
Diffstat (limited to 'include/dbus_singleton.hpp')
-rw-r--r-- | include/dbus_singleton.hpp | 6 |
1 files changed, 5 insertions, 1 deletions
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 <boost/asio/io_context.hpp> #include <sdbusplus/asio/connection.hpp> namespace crow { namespace connections { -static std::shared_ptr<sdbusplus::asio::connection> 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 |