diff options
author | finn0s <90374296+finn0s@users.noreply.github.com> | 2023-09-15 09:40:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-15 10:40:45 +0300 |
commit | 4715257de1e0d49fca734698ca417c5e841248c5 (patch) | |
tree | 80780fa13e49d5b88fe920678b21573eea988ee4 /pf4j/src/main | |
parent | e4d7c7b9ea0c9a32179c3e33da1403228838944f (diff) | |
download | pf4j-4715257de1e0d49fca734698ca417c5e841248c5.tar.gz pf4j-4715257de1e0d49fca734698ca417c5e841248c5.zip |
Unload broken plugins fix (#545)
Diffstat (limited to 'pf4j/src/main')
-rw-r--r-- | pf4j/src/main/java/org/pf4j/AbstractPluginManager.java | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java b/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java index f56a94f..a23fc6a 100644 --- a/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java +++ b/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java @@ -280,15 +280,22 @@ public abstract class AbstractPluginManager implements PluginManager { dependents.addAll(0, dependencyResolver.getDependents(dependent)); } } + PluginWrapper pluginWrapper = getPlugin(pluginId); + PluginState pluginState; + try { + pluginState = stopPlugin(pluginId, false); + if (PluginState.STARTED == pluginState) { + return false; + } - PluginState pluginState = stopPlugin(pluginId, false); - if (PluginState.STARTED == pluginState) { - return false; + log.info("Unload plugin '{}'", getPluginLabel(pluginWrapper.getDescriptor())); + } catch (Exception e) { + if (pluginWrapper == null) { + return false; + } + pluginState = PluginState.FAILED; } - PluginWrapper pluginWrapper = getPlugin(pluginId); - log.info("Unload plugin '{}'", getPluginLabel(pluginWrapper.getDescriptor())); - // remove the plugin plugins.remove(pluginId); getResolvedPlugins().remove(pluginWrapper); |