[Soot-list] Soot-2.4.0 bug? SynchObliviousMhpAnalysis.java:288 throws java.util.ConcurrentModificationException
Paris Yiapanis
yiapanip at cs.man.ac.uk
Thu Jun 24 11:42:29 EDT 2010
Hi Jeff,
>
> The problem is that you are modifying the collection while you are
> iterating through. This is not allowed with fail-fast iterators. It throws
> an exceptions as this can cause unpredictable results.
>
> You could try maybe using some collection that supports concurrent
> modification.
>
> Or maybe you find a way around this.
>
> For example (if I remember well), using a HashMap you could have the same
> problems. However, if you get the keySet of the map, you could go through
> the collection without using the iterator and inspect the items with
> .get(..) and subsequently remove the ones you want.
>
> I hope that helps.
>
> - Paris
>
>
> On Thu, Jun 24, 2010 at 12:32 PM, Jeff <jeffwalt630 at gmail.com> wrote:
>
>>
>> Dear Eric and all,
>>
>> I am using Soot-2.4.0 to analyze a multi-threaded application and the
>> following exception crashes the program:
>>
>> Caused by: java.util.ConcurrentModificationException
>> at
>> java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
>> at java.util.AbstractList$Itr.next(AbstractList.java:343)
>> at
>> soot.jimple.toolkits.thread.mhp.SynchObliviousMhpAnalysis.run(SynchObliviousMhpAnalysis.java:288)
>> at
>> soot.jimple.toolkits.thread.mhp.SynchObliviousMhpAnalysis.buildMHPLists(SynchObliviousMhpAnalysis.java:61)
>> at
>> soot.jimple.toolkits.thread.mhp.SynchObliviousMhpAnalysis.<init>(SynchObliviousMhpAnalysis.java:47)
>> at
>> soot.jimple.toolkits.thread.mhp.UnsynchronizedMhpAnalysis.<init>(UnsynchronizedMhpAnalysis.java:7)
>> at
>> edu.hkust.clap.transformer.phase1.WholeProgramTransformer.internalTransform(WholeProgramTransformer.java:47)
>> .....
>>
>>
>> The corresponding source code @ SynchObliviousMhpAnalysis.run:
>>
>> boolean addedNew = true;
>> while(addedNew)
>> {
>> addedNew = false;
>> Iterator<AbstractRuntimeThread> it =
>> runAtOnceCandidates.iterator();
>> while(it.hasNext())
>> {
>> 288: AbstractRuntimeThread someThread = it.next();
>> SootMethod someStartMethod =
>> someThread.getStartStmtMethod();
>> if(mayHappenInParallelInternal(someStartMethod,
>> someStartMethod))
>> {
>> MHPLists.add(someThread); // add a second copy of it
>> someThread.setStartMethodMayHappenInParallel();
>> someThread.setRunsMany();
>> 295: runAtOnceCandidates.remove(someThread);
>> if(optionPrintDebug)
>> G.v().out.println(someThread.toString());
>> addedNew = true;
>> }
>> }
>> }
>>
>>
>> Clearly the problem is caused by invoking "next()" on the List
>> "runAtOnceCandidates" at line 288 after calling "remove()" at line 295 on
>> it.
>>
>>
>> -Jeff
>>
>>
>> _______________________________________________
>> Soot-list mailing list
>> Soot-list at sable.mcgill.ca
>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20100624/a5bc419e/attachment.html
More information about the Soot-list
mailing list