Avoid real work (here initializiing/setting classpath containers) during static initializers.
I saw deadlocks with involvment of the following stack-fragment:
at org.eclipse.jdt.core.JavaCore.setClasspathVariable(JavaCore.java:4923)
at org.eclipse.objectteams.otdt.core.ext.OTVariableInitializer.initialize(OTVariableInitializer.java:62)
at org.eclipse.jdt.core.JavaCore.getClasspathVariable(JavaCore.java:2858)
at org.eclipse.jdt.internal.core.JavaModelManager.getResolvedVariablePath(JavaModelManager.java:2411)
at org.eclipse.jdt.core.JavaCore.getResolvedVariablePath(JavaCore.java:3400)
at org.eclipse.objectteams.otdt.core.ext.OTDTPlugin.getResolvedVariablePath(OTDTPlugin.java:166)
at org.eclipse.objectteams.otdt.core.ext.OTREContainer.<clinit>(OTREContainer.java:73)
at org.eclipse.objectteams.otdt.core.ext.OTDTPlugin.start(OTDTPlugin.java:120)
(initializing BCEL_PATH early is OK, we need the BundleContext and don't perform further computations)
diff --git a/plugins/org.eclipse.objectteams.otdt.debug/src/org/eclipse/objectteams/otdt/debug/OTVMRunnerAdaptor.java b/plugins/org.eclipse.objectteams.otdt.debug/src/org/eclipse/objectteams/otdt/debug/OTVMRunnerAdaptor.java
index b1f97db..edf1b29 100644
--- a/plugins/org.eclipse.objectteams.otdt.debug/src/org/eclipse/objectteams/otdt/debug/OTVMRunnerAdaptor.java
+++ b/plugins/org.eclipse.objectteams.otdt.debug/src/org/eclipse/objectteams/otdt/debug/OTVMRunnerAdaptor.java
@@ -50,11 +50,6 @@
private static final String OT_DEBUG_CALLIN_STEPPING_VMARG = "-Dot.debug.callin.stepping";
private static final String OT_TEAMCONFIG_VMARG = "-Dot.teamconfig";
private static List<String> JPLIS_VMARGS;
- static {
- JPLIS_VMARGS = new ArrayList<String>();
- JPLIS_VMARGS.add("-Dot.otdt");
- JPLIS_VMARGS.add("-javaagent:" + "\""+OTREContainer.OTRE_AGENT_JAR_PATH.toOSString()+'"'); // support blanks in path
- }
private ILaunchConfiguration _launchConfig;
private String _mode;
@@ -139,7 +134,7 @@
String sep = " ";
StringBuffer result = new StringBuffer(vmArguments);
- for (String arg : JPLIS_VMARGS)
+ for (String arg : getJplisVmargs())
result.append(sep).append(arg);
String callinSteppingVMArg = getCallinSteppingVMArg();
@@ -155,6 +150,15 @@
return result.toString();
}
+ private List<String> getJplisVmargs() {
+ if (JPLIS_VMARGS == null) {
+ JPLIS_VMARGS = new ArrayList<String>();
+ JPLIS_VMARGS.add("-Dot.otdt");
+ JPLIS_VMARGS.add("-javaagent:" + "\""+OTREContainer.getOtreAgentJarPath().toOSString()+'"'); // support blanks in path
+ }
+ return JPLIS_VMARGS;
+ }
+
private String getCallinSteppingVMArg() {
String value = OTDebugPlugin.getDefault().getCallinSteppingConfig();
if (value == null) return null;
@@ -163,7 +167,7 @@
protected List<String> getOTVMArgs()
{
- return new ArrayList<String>(JPLIS_VMARGS);
+ return new ArrayList<String>(getJplisVmargs());
}
/**