Fix: Plugin Exception Handler didn't disabled plugin if crash was detected

This commit is contained in:
nicolas.dorier 2024-07-17 11:23:14 +09:00
parent fe01e4693f
commit 8b20cd9082
No known key found for this signature in database
GPG key ID: 6618763EF09186FE

View file

@ -33,18 +33,19 @@ namespace BTCPayServer.Plugins
!PluginManager.IsExceptionByPlugin(exception, out var pluginName))
return ValueTask.FromResult(false);
_logs.Configuration.LogError(exception, $"Unhandled exception caused by plugin '{pluginName}', disabling it and restarting...");
PluginManager.DisablePlugin(_pluginDir, pluginName);
_ = Task.Delay(3000).ContinueWith((t) => _applicationLifetime.StopApplication());
// Returning true here means we will see Error 500 error message.
// Returning false means that the user will see a stacktrace.
return ValueTask.FromResult(false);
}
internal static bool GetDisablePluginIfCrash(HttpContext httpContext)
public static bool GetDisablePluginIfCrash(HttpContext httpContext)
{
return httpContext.Items.TryGetValue("DisablePluginIfCrash", out object renderingDashboard) ||
renderingDashboard is not true;
}
internal static void SetDisablePluginIfCrash(HttpContext httpContext)
public static void SetDisablePluginIfCrash(HttpContext httpContext)
{
httpContext.Items.TryAdd("DisablePluginIfCrash", true);
}