From afc5ea57b496c633a1a16c67cf132df6c5ed9b46 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Fri, 10 Mar 2023 11:39:11 +0000 Subject: ipa: raspberrypi: Fix crash under LTO When compiled with LTO (the default on Ubuntu), the global static objects camHelpers and algorithms cause a crash in raspberrypi_ipa_proxy at runtime as they're not allocated by the time the registration routines execute. This is a fairly crude fix which just converts the global static objects into local static objects inside an equivalently named function. Signed-off-by: Dave Jones Signed-off-by: Naushir Patuck Tested-by: Naushir Patuck Reviewed-by: Laurent Pinchart Signed-off-by: Kieran Bingham --- src/ipa/raspberrypi/controller/algorithm.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/ipa/raspberrypi/controller') diff --git a/src/ipa/raspberrypi/controller/algorithm.cpp b/src/ipa/raspberrypi/controller/algorithm.cpp index 6d91ee29..a957fde5 100644 --- a/src/ipa/raspberrypi/controller/algorithm.cpp +++ b/src/ipa/raspberrypi/controller/algorithm.cpp @@ -34,14 +34,23 @@ void Algorithm::process([[maybe_unused]] StatisticsPtr &stats, /* For registering algorithms with the system: */ -static std::map algorithms; -std::map const &RPiController::getAlgorithms() +namespace { + +std::map &algorithms() { + static std::map algorithms; return algorithms; } +} /* namespace */ + +std::map const &RPiController::getAlgorithms() +{ + return algorithms(); +} + RegisterAlgorithm::RegisterAlgorithm(char const *name, AlgoCreateFunc createFunc) { - algorithms[std::string(name)] = createFunc; + algorithms()[std::string(name)] = createFunc; } -- cgit v1.2.1