diff options
author | Michael Valenta | 2003-10-17 19:02:04 +0000 |
---|---|---|
committer | Michael Valenta | 2003-10-17 19:02:04 +0000 |
commit | 987c8663f992f3e23df6a1e5270ba84879fb32e0 (patch) | |
tree | 81202eed493cacc14a0689973104e4e91759ca66 | |
parent | 6f835d75af0cd19ba5a8cf46db28932d2d59cc68 (diff) | |
download | eclipse.platform.team-987c8663f992f3e23df6a1e5270ba84879fb32e0.tar.gz eclipse.platform.team-987c8663f992f3e23df6a1e5270ba84879fb32e0.tar.xz eclipse.platform.team-987c8663f992f3e23df6a1e5270ba84879fb32e0.zip |
37549: [CVS UI] NPE in CVSLightweightDecorator during startup
-rw-r--r-- | bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java index 7dfcd5741..b77845db3 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java @@ -63,7 +63,7 @@ public class TeamUIPlugin extends AbstractUIPlugin implements IPropertyChangeLis private static List propertyChangeListeners = new ArrayList(5); - private static Hashtable imageDescriptors = new Hashtable(20); + private Hashtable imageDescriptors = new Hashtable(20); private static List disposeOnShutdownImages= new ArrayList(); private RefreshSubscriberInputJob refreshJob; @@ -140,6 +140,16 @@ public class TeamUIPlugin extends AbstractUIPlugin implements IPropertyChangeLis * @return the singleton plugin instance */ public static TeamUIPlugin getPlugin() { + // If the instance has not been initialized, we will wait. + // This can occur if multiple threads try to load the plugin at the same + // time (see bug 33825: http://bugs.eclipse.org/bugs/show_bug.cgi?id=33825) + while (instance == null) { + try { + Thread.sleep(50); + } catch (InterruptedException e) { + // ignore and keep trying + } + } return instance; } /** @@ -252,6 +262,10 @@ public class TeamUIPlugin extends AbstractUIPlugin implements IPropertyChangeLis * @param baseURL the base URL for the image */ protected static void createImageDescriptor(String id, URL baseURL) { + // Delegate to the plugin instance to avoid concurrent class loading problems + getPlugin().privateCreateImageDescriptor(id, baseURL); + } + private void privateCreateImageDescriptor(String id, URL baseURL) { URL url = null; try { url = new URL(baseURL, ICON_PATH + id); @@ -268,6 +282,10 @@ public class TeamUIPlugin extends AbstractUIPlugin implements IPropertyChangeLis * @return the image associated with the given ID */ public static ImageDescriptor getImageDescriptor(String id) { + // Delegate to the plugin instance to avoid concurrent class loading problems + return getPlugin().privateGetImageDescriptor(id); + } + private ImageDescriptor privateGetImageDescriptor(String id) { if(! imageDescriptors.containsKey(id)) { URL baseURL = TeamUIPlugin.getPlugin().getDescriptor().getInstallURL(); createImageDescriptor(id, baseURL); @@ -363,6 +381,10 @@ public class TeamUIPlugin extends AbstractUIPlugin implements IPropertyChangeLis * Dispose of images */ public static void disposeImages() { + // Delegate to the plugin instance to avoid concurrent class loading problems + getPlugin().privateDisposeImages(); + } + private void privateDisposeImages() { if (disposeOnShutdownImages != null) { Iterator i= disposeOnShutdownImages.iterator(); while (i.hasNext()) { |