From 6bc712d263a2ec80b1a7e589138d6a34651b0622 Mon Sep 17 00:00:00 2001 From: guqing <38999863+guqing@users.noreply.github.com> Date: Mon, 27 Mar 2023 16:12:12 +0800 Subject: [PATCH] fix: NPE when stopping the plugin after the plugin startup fails (#3580) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind improvement /area core /milestone 2.4.x #### What this PR does / why we need it: 修复插件启动失败后停止插件时出现的 NPE 问题 how to test it? 见 #3579,先使用 issue 描述步骤复现问题,在切换到此 PR 尝试相同步骤 #### Which issue(s) this PR fixes: Fixes #3579 #### Does this PR introduce a user-facing change? ```release-note 修复插件启动失败后停止插件时出现的 NPE 问题 ``` --- .../main/java/run/halo/app/plugin/HaloPluginManager.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/run/halo/app/plugin/HaloPluginManager.java b/application/src/main/java/run/halo/app/plugin/HaloPluginManager.java index 9a5908935..d5c5135a5 100644 --- a/application/src/main/java/run/halo/app/plugin/HaloPluginManager.java +++ b/application/src/main/java/run/halo/app/plugin/HaloPluginManager.java @@ -142,7 +142,9 @@ public class HaloPluginManager extends DefaultPluginManager } try { log.info("Stop plugin '{}'", getPluginLabel(pluginDescriptor)); - pluginWrapper.getPlugin().stop(); + if (pluginWrapper.getPlugin() != null) { + pluginWrapper.getPlugin().stop(); + } pluginWrapper.setPluginState(PluginState.STOPPED); // release plugin resources releaseAdditionalResources(pluginId); @@ -304,7 +306,9 @@ public class HaloPluginManager extends DefaultPluginManager rootApplicationContext.publishEvent( new HaloPluginBeforeStopEvent(this, pluginWrapper)); log.info("Stop plugin '{}'", getPluginLabel(pluginWrapper.getDescriptor())); - pluginWrapper.getPlugin().stop(); + if (pluginWrapper.getPlugin() != null) { + pluginWrapper.getPlugin().stop(); + } pluginWrapper.setPluginState(PluginState.STOPPED); itr.remove(); releaseAdditionalResources(pluginWrapper.getPluginId());