Bug 396697 - Deadlock in TransformerHook.recordClassDefine()
diff --git a/features/org.eclipse.objectteams.otequinox.feature/feature.xml b/features/org.eclipse.objectteams.otequinox.feature/feature.xml
index 22792fc..1609d3a 100644
--- a/features/org.eclipse.objectteams.otequinox.feature/feature.xml
+++ b/features/org.eclipse.objectteams.otequinox.feature/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.objectteams.otequinox"
label="%featureName"
- version="2.1.0.qualifier"
+ version="2.2.0.qualifier"
provider-name="%providerName"
plugin="org.eclipse.objectteams.otequinox"
colocation-affinity="org.eclipse.rcp">
diff --git a/plugins/org.eclipse.objectteams.otequinox.hook/META-INF/MANIFEST.MF b/plugins/org.eclipse.objectteams.otequinox.hook/META-INF/MANIFEST.MF
index e9c3301..49d25ba 100644
--- a/plugins/org.eclipse.objectteams.otequinox.hook/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.objectteams.otequinox.hook/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.objectteams.otequinox.hook
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.0.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Fragment-Host: org.eclipse.osgi;bundle-version="[3.7.0,4.0.0)"
diff --git a/plugins/org.eclipse.objectteams.otequinox.hook/src/org/eclipse/objectteams/otequinox/internal/hook/TransformerHook.java b/plugins/org.eclipse.objectteams.otequinox.hook/src/org/eclipse/objectteams/otequinox/internal/hook/TransformerHook.java
index f6808c5..d27c18b 100644
--- a/plugins/org.eclipse.objectteams.otequinox.hook/src/org/eclipse/objectteams/otequinox/internal/hook/TransformerHook.java
+++ b/plugins/org.eclipse.objectteams.otequinox.hook/src/org/eclipse/objectteams/otequinox/internal/hook/TransformerHook.java
@@ -851,13 +851,15 @@
shouldTrigger = true;
}
// perform scheduled activations:
- if (shouldTrigger)
+ if (shouldTrigger) {
+ Bundle[] copy;
synchronized (this.activatableBundles) {
- Bundle[] copy = this.activatableBundles.toArray(new Bundle[this.activatableBundles.size()]);
- for (Bundle bundle : copy)
- BaseBundleRole.endActivation(this.bundleRegistry, bundle, this.aspectRegistry, this.teamLoadingService);
+ copy = this.activatableBundles.toArray(new Bundle[this.activatableBundles.size()]);
this.activatableBundles.clear();
}
+ for (Bundle bundle : copy)
+ BaseBundleRole.endActivation(this.bundleRegistry, bundle, this.aspectRegistry, this.teamLoadingService);
+ }
if (name.startsWith("org.objectteams")) {
if (name.equals(ORG_OBJECTTEAMS_TEAM))
diff --git a/plugins/org.eclipse.objectteams.otequinox/META-INF/MANIFEST.MF b/plugins/org.eclipse.objectteams.otequinox/META-INF/MANIFEST.MF
index 693b310..68de648 100644
--- a/plugins/org.eclipse.objectteams.otequinox/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.objectteams.otequinox/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.objectteams.otequinox;singleton:=true
-Bundle-Version: 2.1.0.qualifier
+Bundle-Version: 2.2.0.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.6.0,4.0.0)",
diff --git a/plugins/org.eclipse.objectteams.otequinox/about.ini b/plugins/org.eclipse.objectteams.otequinox/about.ini
index fb4d01e..06091aa 100644
--- a/plugins/org.eclipse.objectteams.otequinox/about.ini
+++ b/plugins/org.eclipse.objectteams.otequinox/about.ini
@@ -1,8 +1,8 @@
aboutText=Object Teams -- Equinox integration (OT/Equinox)\n\
\n\
-OT/Equinox Version: 2.1.0\n\
+Version: 2.2.0 M4\n\
\n\
-Part of the Eclipse Juno Simultaneous Release\n\
+Part of the Eclipse Kepler Simultaneous Release\n\
\n\
(c) Copyright Technical University Berlin and others, 2005, 2012\n\
Visit http://www.eclipse.org/objectteams\n\
diff --git a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/otequinox/internal/ASMByteCodeAnalyzer.java b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/otequinox/internal/ASMByteCodeAnalyzer.java
index 9606417..4544d37 100644
--- a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/otequinox/internal/ASMByteCodeAnalyzer.java
+++ b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/otequinox/internal/ASMByteCodeAnalyzer.java
@@ -20,6 +20,7 @@
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.eclipse.objectteams.otequinox.hook.IByteCodeAnalyzer;
import org.objectweb.asm.ClassReader;
@@ -77,7 +78,8 @@
}
}
- private Map<String, ClassInformation> classInformationMap = new HashMap<String, ClassInformation>();
+ private Map<String, ClassInformation> classInformationMap =
+ new ConcurrentHashMap<String, ClassInformation>(512, 0.75f, 4);
/**
* {@inheritDoc}
@@ -111,19 +113,17 @@
private ClassInformation getClassInformation(byte[] classBytes,
InputStream classStream, String className) throws IOException
{
- synchronized (this.classInformationMap) {
- ClassInformation classInformation = classInformationMap.get(className);
- if (classInformation != null) {
- return classInformation;
- }
- if (classBytes != null) {
- classInformation = this.getClassInformationPrivate(classBytes);
- } else {
- classInformation = this.getClassInformationPrivate(classStream);
- }
- classInformationMap.put(className, classInformation);
+ ClassInformation classInformation = classInformationMap.get(className);
+ if (classInformation != null) {
return classInformation;
}
+ if (classBytes != null) {
+ classInformation = this.getClassInformationPrivate(classBytes);
+ } else {
+ classInformation = this.getClassInformationPrivate(classStream);
+ }
+ classInformationMap.put(className, classInformation);
+ return classInformation;
}
diff --git a/releng/map/otdt.map b/releng/map/otdt.map
index 6f0a815..bf6c6bf 100644
--- a/releng/map/otdt.map
+++ b/releng/map/otdt.map
@@ -4,7 +4,7 @@
feature@org.eclipse.objectteams.otdt=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=features/org.eclipse.objectteams.otdt.feature
feature@org.eclipse.objectteams.otdt.source.feature=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=features/org.eclipse.objectteams.otdt.source.feature
feature@org.eclipse.objectteams.otdt.core.patch=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=features/org.eclipse.objectteams.otdt.core.patch
-feature@org.eclipse.objectteams.otequinox=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=features/org.eclipse.objectteams.otequinox.feature,tag=builds/201206090452
+feature@org.eclipse.objectteams.otequinox=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=features/org.eclipse.objectteams.otequinox.feature
!-- Also don't use version numbers for those plugins that hold the various otre jars: --
plugin@org.eclipse.jdt.core,3.9.0.v_OTDT_r220_qualifier=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=org.eclipse.jdt.core
@@ -19,10 +19,10 @@
plugin@org.eclipse.objectteams.otdt.metrics,0.7.0=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.otdt.metrics,tag=builds/201101290806
plugin@org.eclipse.objectteams.runtime=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.runtime
-fragment@org.eclipse.objectteams.otequinox.hook,2.1.0=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.otequinox.hook,tag=builds/201206090452
+fragment@org.eclipse.objectteams.otequinox.hook,2.2.0=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.otequinox.hook
fragment@org.eclipse.objectteams.otequinox.sunjvm,2.0.0=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.otequinox.sunjvm,tag=builds/201109201811
!the following is also referenced in otdt.doc/buildDoc.xml (plugin-name without version):
-plugin@org.eclipse.objectteams.otequinox=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.otequinox,tag=builds/201206090452
+plugin@org.eclipse.objectteams.otequinox=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.otequinox
plugin@org.eclipse.objectteams.eclipse.monitor,2.0.0=GIT,repo=git://git.eclipse.org/gitroot/objectteams/org.eclipse.objectteams.git,path=plugins/org.eclipse.objectteams.eclipse.monitor
!not currently maintained: