aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2020-06-18 08:59:45 +0200
committerGitHub <noreply@github.com>2020-06-18 08:59:45 +0200
commita915b45190ee1fcfeffa37cd4f2fa2733b16e9ff (patch)
tree6482fa5fc02bd5a4c5a61f7ec6aeb205094fe2fe
parent3ac0484dedb0ea494c98bcd5d3ded41118b508c9 (diff)
parent5ab5a5f89eb81b16be7cac83fab0ba37f45718b4 (diff)
downloadnextcloud-server-a915b45190ee1fcfeffa37cd4f2fa2733b16e9ff.tar.gz
nextcloud-server-a915b45190ee1fcfeffa37cd4f2fa2733b16e9ff.zip
Merge pull request #21461 from nextcloud/fix/catch-app-register-boot-exceptions
Catch all exceptions when an app is registering or booting
-rw-r--r--lib/private/AppFramework/Bootstrap/Coordinator.php16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/private/AppFramework/Bootstrap/Coordinator.php b/lib/private/AppFramework/Bootstrap/Coordinator.php
index e713ad7ce91..08951419906 100644
--- a/lib/private/AppFramework/Bootstrap/Coordinator.php
+++ b/lib/private/AppFramework/Bootstrap/Coordinator.php
@@ -32,6 +32,7 @@ use OCP\AppFramework\QueryException;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\ILogger;
use OCP\IServerContainer;
+use Throwable;
use function class_exists;
use function class_implements;
use function in_array;
@@ -81,9 +82,17 @@ class Coordinator {
try {
/** @var IBootstrap|App $application */
$apps[$appId] = $application = $this->serverContainer->query($applicationClassName);
- $application->register($context->for($appId));
} catch (QueryException $e) {
// Weird, but ok
+ return;
+ }
+ try {
+ $application->register($context->for($appId));
+ } catch (Throwable $e) {
+ $this->logger->logException($e, [
+ 'message' => 'Error during app service registration: ' . $e->getMessage(),
+ 'level' => ILogger::FATAL,
+ ]);
}
}
}
@@ -125,6 +134,11 @@ class Coordinator {
'message' => "Could not boot $appId" . $e->getMessage(),
]);
return;
+ } catch (Throwable $e) {
+ $this->logger->logException($e, [
+ 'message' => "Could not boot $appId" . $e->getMessage(),
+ 'level' => ILogger::FATAL,
+ ]);
}
}
}