Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CodeConverter.replaceArrayAccess leads to java.util.ConcurrentModificationException #305

Open
nschaefe opened this issue Mar 24, 2020 · 1 comment

Comments

@nschaefe
Copy link
Contributor

Using CodeConverter.replaceArrayAccess leads to a ConcurrentModificationException for some classes. For example for java.util.concurrent.ArrayBlockingQueue.
I am using version 3.27.0-GA.

CtClass ctCl = getArrayBlockingQueue();
ClassPool cp = getClassPool();
CtClass tracker = cp.get("some class");
CodeConverter conv = new CodeConverter();
conv.replaceArrayAccess(tracker, new CodeConverter.DefaultArrayAccessReplacementMethodNames());
ctCl.instrument(conv);

leads to the following error:
javassist.build.JavassistBuildException: javassist.CannotCompileException: by java.util.ConcurrentModificationException
at boundarydetection.agent.Agent.applyTransformations(Agent.java:214)
at boundaryDetection.RTInstrumentation.transformRT(RTInstrumentation.java:52)
at boundaryDetection.RTInstrumentation.main(RTInstrumentation.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282)
at java.lang.Thread.run(Thread.java:748)
Caused by: javassist.CannotCompileException: by java.util.ConcurrentModificationException
at javassist.convert.TransformAccessArrayField.initialize(TransformAccessArrayField.java:83)
at javassist.CodeConverter.doit(CodeConverter.java:552)
at javassist.CtClassType.instrument(CtClassType.java:1530)
at boundarydetection.agent.Agent.transformClass(Agent.java:165)
at boundarydetection.agent.Agent.applyTransformations(Agent.java:212)
... 8 more
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)
at java.util.HashMap$KeyIterator.next(HashMap.java:1469)
at javassist.bytecode.analysis.Type.findCommonInterfaces(Type.java:499)
at javassist.bytecode.analysis.Type.findCommonInterfaces(Type.java:475)
at javassist.bytecode.analysis.Type.mergeClasses(Type.java:452)
at javassist.bytecode.analysis.Type.merge(Type.java:305)
at javassist.bytecode.analysis.Frame.merge(Frame.java:216)
at javassist.bytecode.analysis.Analyzer.merge(Analyzer.java:283)
at javassist.bytecode.analysis.Analyzer.mergeExceptionHandlers(Analyzer.java:300)
at javassist.bytecode.analysis.Analyzer.analyzeNextEntry(Analyzer.java:208)
at javassist.bytecode.analysis.Analyzer.analyze(Analyzer.java:142)
at javassist.convert.TransformAccessArrayField.initFrames(TransformAccessArrayField.java:107)
at javassist.convert.TransformAccessArrayField.initialize(TransformAccessArrayField.java:70)
... 12 more

This is caused by the manipulation of a map while iterating over its key set. So using an invalidated iterator.
at javassist.bytecode.analysis.Type.findCommonInterfaces(Type.java:499)
and the same for the value set
at javassist.bytecode.analysis.Type.findCommonInterfaces(Type.java:506)

@jorgee
Copy link

jorgee commented Jan 3, 2021

I am having the same issue when updating to the latest release 3.27.0-GA. It was not happening in previous version i was using 3.21

odl-github pushed a commit to opendaylight/odlparent that referenced this issue Jan 7, 2022
odl-github pushed a commit to opendaylight/odlparent that referenced this issue Jan 7, 2022
jboss-javassist/javassist#305
jboss-javassist/javassist#328
jboss-javassist/javassist#339
jboss-javassist/javassist#350
jboss-javassist/javassist#357
jboss-javassist/javassist#363

Change-Id: I29963013cf637731fe1064425b9d2e80d63bd9d3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 0df0ba3)
odl-github pushed a commit to opendaylight/odlparent that referenced this issue Jan 7, 2022
jboss-javassist/javassist#305
jboss-javassist/javassist#328
jboss-javassist/javassist#339
jboss-javassist/javassist#350
jboss-javassist/javassist#357
jboss-javassist/javassist#363

Change-Id: I29963013cf637731fe1064425b9d2e80d63bd9d3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 0df0ba3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants