Project: Eclipse_Platform_UI
Bug 33858 Decorator thread reactivats plugins on shutdown
Reported: 2003-03-05 11:46:08 | Status: closed fixed

When the platform shuts down, the decoratgor thread can cause plugins to be reactivated when it is calling dispose on it's decorators. Below is the stacktrace. Can the decorator thread be killed before plugin deactivation begins? Thread [main] (Suspended (breakpoint at line 68 in TeamPlugin)) TeamPlugin.startup() line: 68 PluginDescriptor$1.run() line: 728 InternalPlatform.run(ISafeRunnable) line: 867 PluginDescriptor.internalDoPluginActivation() line: 740 PluginDescriptor.doPluginActivation() line: 188 PluginClassLoader.activatePlugin(String) line: 112 PluginClassLoader.internalFindClassParentsSelf(String, boolean, DelegatingURLClassLoader, boolean) line: 185 PluginClassLoader(DelegatingURLClassLoader).findClassParentsSelf (String, boolean, DelegatingURLClassLoader, boolean) line: 490 PluginClassLoader(DelegatingURLClassLoader).loadClass(String, boolean, DelegatingURLClassLoader, Vector, boolean) line: 882 DelegatingURLClassLoader.access$0(DelegatingURLClassLoader, String, boolean, DelegatingURLClassLoader, Vector, boolean) line: 876 DelegatingURLClassLoader$DelegateLoader.loadClass(String, DelegatingURLClassLoader, DelegatingURLClassLoader, Vector) line: 90 PluginClassLoader(DelegatingURLClassLoader).findClassPrerequisites (String, DelegatingURLClassLoader, Vector) line: 554 PluginClassLoader(DelegatingURLClassLoader).loadClass(String, boolean, DelegatingURLClassLoader, Vector, boolean) line: 890 PluginClassLoader(DelegatingURLClassLoader).loadClass(String, boolean) line: 862 PluginClassLoader(ClassLoader).loadClass(String) line: 445 ClassLoader.defineClass0(String, byte[], int, int, ProtectionDomain, Certificate[], byte[]) line: not available [native method] PluginClassLoader(ClassLoader).defineClass(String, byte[], int, int, ProtectionDomain) line: 694 PluginClassLoader(SecureClassLoader).defineClass(String, byte[], int, int, CodeSource) line: 133 PluginClassLoader(URLClassLoader).defineClass(String, Resource) line: 319 URLClassLoader.access$400(URLClassLoader, String, Resource) line: 92 URLClassLoader$ClassFinder.run() line: 677 AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) line: not available [native method] PluginClassLoader(URLClassLoader).findClass(String) line: 238 PluginClassLoader(DelegatingURLClassLoader).findClass(String) line: 922 PluginClassLoader.internalFindClassParentsSelf(String, boolean, DelegatingURLClassLoader, boolean) line: 196 PluginClassLoader(DelegatingURLClassLoader).findClassParentsSelf (String, boolean, DelegatingURLClassLoader, boolean) line: 490 PluginClassLoader(DelegatingURLClassLoader).loadClass(String, boolean, DelegatingURLClassLoader, Vector, boolean) line: 882 PluginClassLoader(DelegatingURLClassLoader).loadClass(String, boolean) line: 862 PluginClassLoader(ClassLoader).loadClass(String) line: 445 Class.getConstructor0(Class[], int) line: not available [native method] Class.getConstructor(Class[]) line: 967 PluginDescriptor.internalDoPluginActivation() line: 701 PluginDescriptor.doPluginActivation() line: 188 PluginClassLoader.activatePlugin(String) line: 112 PluginClassLoader.internalFindClassParentsSelf(String, boolean, DelegatingURLClassLoader, boolean) line: 185 PluginClassLoader(DelegatingURLClassLoader).findClassParentsSelf (String, boolean, DelegatingURLClassLoader, boolean) line: 490 PluginClassLoader(DelegatingURLClassLoader).loadClass(String, boolean, DelegatingURLClassLoader, Vector, boolean) line: 882 PluginClassLoader(DelegatingURLClassLoader).loadClass(String, boolean) line: 862 PluginClassLoader(ClassLoader).loadClass(String) line: 445 CVSProviderPlugin.broadcastDecoratorEnablementChanged(boolean) line: 457 CVSLightweightDecorator.dispose() line: 515 LightweightDecoratorDefinition (DecoratorDefinition).disposeCachedDecorator(IBaseLabelProvider) line: 122 LightweightDecoratorDefinition.refreshDecorator() line: 178 LightweightDecoratorDefinition(DecoratorDefinition).setEnabled(boolean) line: 100 LightweightDecoratorManager.shutdown() line: 123 DecoratorManager.shutdown() line: 524 WorkbenchPlugin.shutdown() line: 621 PluginRegistry$2.run() line: 283 InternalPlatform.run(ISafeRunnable) line: 867 PluginRegistry$1.visit(IPluginDescriptor) line: 296 PluginRegistry.accept(IPluginVisitor, boolean) line: 55 PluginRegistry.shutdownPlugins() line: 299 PluginRegistry.shutdown(IProgressMonitor) line: 265 InternalPlatform.loaderShutdown() line: 517 Method.invoke(Object, Object[]) line: not available [native method] InternalBootLoader.shutdown() line: 979 InternalBootLoader.run(String, URL, String, String[], Runnable) line: 850 BootLoader.run(String, URL, String, String[], Runnable) line: 461 Method.invoke(Object, Object[]) line: not available [native method] Main.basicRun(String[]) line: 247 Main.run(String[]) line: 703 Main.main(String[]) line: 539

Files changed in fix:
bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java