Skip to content

Commit

Permalink
Fix #229 - race cond. in PluginRegistry
Browse files Browse the repository at this point in the history
  • Loading branch information
skybber committed Mar 15, 2018
1 parent efa5dae commit d8f0138
Showing 1 changed file with 10 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -148,13 +148,12 @@ public Object initializePlugin(String pluginClass, ClassLoader appClassLoader) {
}

// already initialized in this or parent classloader
if (hasPlugin(clazz, appClassLoader, false)) {
if (doHasPlugin(clazz, appClassLoader, false, true)) {
LOGGER.debug("Plugin {} already initialized in parent classloader of {}.", clazz, appClassLoader );
return getPlugin(clazz, appClassLoader);
}

Object pluginInstance = instantiate(clazz);
registeredPlugins.get(clazz).put(appClassLoader, pluginInstance);
Object pluginInstance = registeredPlugins.get(clazz).get(appClassLoader);

if (annotationProcessor.processAnnotations(pluginInstance)) {
LOGGER.info("Plugin '{}' initialized in ClassLoader '{}'.", pluginClass, appClassLoader);
Expand Down Expand Up @@ -208,6 +207,10 @@ public <T> T getPlugin(Class<T> pluginClass, ClassLoader classLoader) {
* @return true/false
*/
public boolean hasPlugin(Class<?> pluginClass, ClassLoader classLoader, boolean checkParent) {
return doHasPlugin(pluginClass, classLoader,checkParent, false);
}

public boolean doHasPlugin(Class<?> pluginClass, ClassLoader classLoader, boolean checkParent, boolean createIfMissing) {
if (!registeredPlugins.containsKey(pluginClass))
return false;

Expand All @@ -220,6 +223,10 @@ public boolean hasPlugin(Class<?> pluginClass, ClassLoader classLoader, boolean
return true;
}
}
if (createIfMissing) {
Object pluginInstance = instantiate((Class<Object>) pluginClass);
pluginInstances.put(classLoader, pluginInstance);
}
}
return false;
}
Expand Down

0 comments on commit d8f0138

Please sign in to comment.