No Static Random in SyncPointBuffer

Last night I was doing some refactoring to change the AInsertBeforeOpcodeStrategy into a more general strategy that can insert both before and after an opcode, based on four predicates that determine whether the class should be instrumented (1), whether the method in the class should be instrumented (2), and finally whether code should be inserted before (3) and after (4) a particular opcode in the method.

When I ran my tests, I noticed that recording wasn’t working anymore. I tracked it down to my use of the java.util.Random class in SyncPointBuffer. Somehow I’m not allowed to reference it there, or that early in the VM initialization. Using Math.random(), however, is ok. I find that weird: I just don’t really see the difference. The java.lang.Math class has a static Random field, just like my class did.

This is going to make it harder to display the seed and set the same seed again for future runs. Maybe I can somehow put it in a different class. Strictly speaking, the delayed execution stuff doesn’t have much to do with a “sync point buffer” anyway, and I only put the methods in the SyncPointBuffer class for convenience.


About Mathias

Software development engineer. Principal developer of DrJava. Recent Ph.D. graduate from the Department of Computer Science at Rice University.
This entry was posted in Concurrent Unit Testing. Bookmark the permalink.

Leave a Reply