From: pcm <pcm...@us...> - 2005-10-05 06:17:16
|
Update of /cvsroot/javapathfinder/javapathfinder/src/gov/nasa/jpf/tools In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3832 Modified Files: RaceDetector.java Log Message: forgot to clone the lockSet elements, which causes subsequent comparisons to fail after a backtrack (ElementInfo indices are reset to -1) using toString() to store the lock ElementInfos is lame (slow), but safe and convenient. I'm lazy today Index: RaceDetector.java =================================================================== RCS file: /cvsroot/javapathfinder/javapathfinder/src/gov/nasa/jpf/tools/RaceDetector.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- RaceDetector.java 25 Aug 2005 18:55:44 -0000 1.3 +++ RaceDetector.java 5 Oct 2005 06:17:07 -0000 1.4 @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedList; import java.util.Stack; import gov.nasa.jpf.PropertyListenerAdapter; @@ -49,7 +50,9 @@ */ public class RaceDetector extends PropertyListenerAdapter { + /*** helper classes ***************************************************************/ + static class FieldAccess { ThreadInfo ti; Object[] locksHeld; // the ones we have during this operation (not really required) @@ -61,8 +64,18 @@ FieldAccess (ThreadInfo ti, FieldInstruction finsn) { this.ti = ti; this.finsn = finsn; - this.locksHeld = ti.getLockedObjects().toArray(); + // we have to do some sort of cloning, since the lockSet and the + // ElementInfos in it are going to be changed by JPF + LinkedList lockSet = ti.getLockedObjects(); + locksHeld = new Object[lockSet.size()]; + if (locksHeld.length > 0) { + Iterator it = lockSet.iterator(); + for (int i=0; it.hasNext(); i++) { + locksHeld[i] = ((ElementInfo)it.next()).toString(); // <2do> - that's lame, but convenient + } + } + // <2do> we should also hash the threads callstack here } |