From f6a79338d4ea66f9c341d004951b606b5310b478 Mon Sep 17 00:00:00 2001
From: Christoph Wurst <christoph@winzerhof-wurst.at>
Date: Fri, 11 Oct 2019 08:21:24 +0200
Subject: [PATCH] Make sure we create an app's Application class just once

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
---
 lib/base.php                    | 2 +-
 lib/private/Route/Router.php    | 2 +-
 lib/private/ServerContainer.php | 3 ++-
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/base.php b/lib/base.php
index 7674c16c26b..510a960e435 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -727,7 +727,7 @@ class OC {
 		// Make sure that the application class is not loaded before the database is setup
 		if ($systemConfig->getValue("installed", false)) {
 			OC_App::loadApp('settings');
-			$settings = new \OCA\Settings\AppInfo\Application();
+			$settings = \OC::$server->query(\OCA\Settings\AppInfo\Application::class);
 			$settings->register();
 		}
 
diff --git a/lib/private/Route/Router.php b/lib/private/Route/Router.php
index 3d91a33cd8a..4c83f251012 100644
--- a/lib/private/Route/Router.php
+++ b/lib/private/Route/Router.php
@@ -371,7 +371,7 @@ class Router implements IRouter {
 			$applicationClassName = $appNameSpace . '\\AppInfo\\Application';
 
 			if (class_exists($applicationClassName)) {
-				$application = new $applicationClassName();
+				$application = \OC::$server->query($applicationClassName);
 			} else {
 				$application = new App($appName);
 			}
diff --git a/lib/private/ServerContainer.php b/lib/private/ServerContainer.php
index b67b4d1e701..704d207223b 100644
--- a/lib/private/ServerContainer.php
+++ b/lib/private/ServerContainer.php
@@ -100,8 +100,9 @@ class ServerContainer extends SimpleContainer {
 			if (!isset($this->hasNoAppContainer[$namespace])) {
 				$applicationClassName = 'OCA\\' . $sensitiveNamespace . '\\AppInfo\\Application';
 				if (class_exists($applicationClassName)) {
-					new $applicationClassName();
+					$app = new $applicationClassName();
 					if (isset($this->appContainers[$namespace])) {
+						$this->appContainers[$namespace]->offsetSet($applicationClassName, $app);
 						return $this->appContainers[$namespace];
 					}
 				}
-- 
GitLab