< prev index next >
test/java/lang/ref/ReferenceEnqueuePending.java
Print this page
rev 13559 : [mq]: inc1
@@ -92,17 +92,25 @@
// our next trip around the loop.
weaky = new NumberedWeakReference(obj, refQueue, i);
}
// Do a final collection to discover and process all
- // Reference objects created above, allowing enough time
+ // Reference objects created above, allowing some time
// for the ReferenceHandler thread to queue the References.
forceGc(100);
forceGc(100);
// Verify that all WeakReference objects ended up queued.
- checkResult(refQueue, obj, iterations-1);
+ checkResult(refQueue, iterations-1);
+
+ // Ensure the final weaky is live but won't be enqueued during
+ // result checking, by ensuring its referent remains live.
+ // This eliminates behavior changes resulting from different
+ // compiler optimizations.
+ Reference.reachabilityFence(weaky);
+ Reference.reachabilityFence(obj);
+
System.out.println("Test passed.");
}
private static NumberedWeakReference waitForReference(ReferenceQueue<Integer> queue) {
try {
@@ -111,11 +119,10 @@
return null;
}
}
private static void checkResult(ReferenceQueue<Integer> queue,
- Integer obj,
int expected) {
if (debug) {
System.out.println("Reading the queue");
}
@@ -131,12 +138,10 @@
}
}
if (debug) {
System.out.println("Reference Queue had " + length + " elements");
}
- // Use the last Reference object of those created above, so as to keep it "alive".
- System.out.println("I must write " + obj + " to prevent compiler optimizations.");
// verify the queued references: all but the last Reference object
// should have been in the queue.
if (debug) {
< prev index next >