< 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 >