From 6fda5b590b6b70979ddf053781a8ace3f6d5a1ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnter=20Obiltschnig?= Date: Tue, 15 Jun 2021 07:45:47 +0200 Subject: [PATCH] #3266: Order of Util::Application::uninitialize() is not in reverse as documented --- Util/src/Application.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Util/src/Application.cpp b/Util/src/Application.cpp index fed07d451..93a46ea89 100644 --- a/Util/src/Application.cpp +++ b/Util/src/Application.cpp @@ -96,12 +96,12 @@ Application::~Application() void Application::setup() { poco_assert (_pInstance == 0); - + _pConfig->add(new SystemConfiguration, PRIO_SYSTEM, false); _pConfig->add(new MapConfiguration, PRIO_APPLICATION, true); - + addSubsystem(new LoggingSubsystem); - + #if defined(POCO_OS_FAMILY_UNIX) && !defined(POCO_VXWORKS) _workingDirAtLaunch = Path::current(); @@ -188,18 +188,19 @@ void Application::initialize(Application& self) _initialized = true; } - + void Application::uninitialize() { if (_initialized) { - for (auto& pSub: _subsystems) + for (SubsystemVec::reverse_iterator it = _subsystems.rbegin(); it != _subsystems.rend(); ++it) { - _pLogger->debug(std::string("Uninitializing subsystem: ") + pSub->name()); - pSub->uninitialize(); + _pLogger->debug(std::string("Uninitializing subsystem: ") + (*it)->name()); + (*it)->uninitialize(); } _initialized = false; } + } @@ -399,7 +400,7 @@ void Application::setArgs(int argc, char* argv[]) void Application::setArgs(const ArgVec& args) { poco_assert (!args.empty()); - + _command = args[0]; _pConfig->setInt("application.argc", (int) args.size()); _unprocessedArgs = args; @@ -479,7 +480,7 @@ void Application::getApplicationPath(Poco::Path& appPath) const bool Application::findFile(Poco::Path& path) const { if (path.isAbsolute()) return true; - + Path appPath; getApplicationPath(appPath); Path base = appPath.parent(); @@ -525,7 +526,7 @@ bool Application::findAppConfigFile(const std::string& appName, const std::strin bool Application::findAppConfigFile(const Path& basePath, const std::string& appName, const std::string& extension, Path& path) const { poco_assert (!appName.empty()); - + Path p(basePath,appName); p.setExtension(extension); bool found = findFile(p);