ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/LockSupportTest.java
(Generate patch)

Comparing jsr166/src/test/tck/LockSupportTest.java (file contents):
Revision 1.23 by jsr166, Sat May 28 22:21:58 2011 UTC vs.
Revision 1.29 by jsr166, Fri May 12 18:48:11 2017 UTC

# Line 7 | Line 7
7   * Pat Fisher, Mike Judd.
8   */
9  
10 < import junit.framework.*;
10 > import static java.util.concurrent.TimeUnit.MILLISECONDS;
11 >
12   import java.util.concurrent.CountDownLatch;
13   import java.util.concurrent.atomic.AtomicBoolean;
14   import java.util.concurrent.locks.LockSupport;
15 < import static java.util.concurrent.TimeUnit.MILLISECONDS;
15 >
16 > import junit.framework.Test;
17 > import junit.framework.TestSuite;
18  
19   public class LockSupportTest extends JSR166TestCase {
20      public static void main(String[] args) {
21 <        junit.textui.TestRunner.run(suite());
21 >        main(suite(), args);
22      }
23  
24      public static Test suite() {
25          return new TestSuite(LockSupportTest.class);
26      }
27  
28 +    static {
29 +        // Reduce the risk of rare disastrous classloading in first call to
30 +        // LockSupport.park: https://bugs.openjdk.java.net/browse/JDK-8074773
31 +        Class<?> ensureLoaded = LockSupport.class;
32 +    }
33 +
34      /**
35       * Returns the blocker object used by tests in this file.
36       * Any old object will do; we'll return a convenient one.
# Line 177 | Line 186 | public class LockSupportTest extends JSR
186          Thread t = newStartedThread(new CheckedRunnable() {
187              public void realRun() {
188                  pleaseInterrupt.countDown();
189 <                do {
189 >                for (int tries = MAX_SPURIOUS_WAKEUPS; tries-->0; ) {
190                      parkMethod.park();
191 <                    // park may return spuriously
192 <                } while (! Thread.currentThread().isInterrupted());
191 >                    if (Thread.interrupted())
192 >                        return;
193 >                }
194 >                fail("too many consecutive spurious wakeups?");
195              }});
196  
197          await(pleaseInterrupt);
# Line 247 | Line 258 | public class LockSupportTest extends JSR
258      public void testParkTimesOut(final ParkMethod parkMethod) {
259          Thread t = newStartedThread(new CheckedRunnable() {
260              public void realRun() {
261 <                for (;;) {
261 >                for (int tries = MAX_SPURIOUS_WAKEUPS; tries-->0; ) {
262                      long startTime = System.nanoTime();
263                      parkMethod.park(timeoutMillis());
253                    // park may return spuriously
264                      if (millisElapsedSince(startTime) >= timeoutMillis())
265                          return;
266                  }
267 +                fail("too many consecutive spurious wakeups?");
268              }});
269  
270          awaitTermination(t);
# Line 287 | Line 298 | public class LockSupportTest extends JSR
298              public void realRun() {
299                  Thread t = Thread.currentThread();
300                  started.countDown();
301 <                do {
301 >                for (int tries = MAX_SPURIOUS_WAKEUPS; tries-->0; ) {
302                      assertNull(LockSupport.getBlocker(t));
303                      parkMethod.park();
304                      assertNull(LockSupport.getBlocker(t));
305 <                    // park may return spuriously
306 <                } while (! Thread.currentThread().isInterrupted());
305 >                    if (Thread.interrupted())
306 >                        return;
307 >                }
308 >                fail("too many consecutive spurious wakeups?");
309              }});
310  
311          long startTime = System.nanoTime();
# Line 308 | Line 321 | public class LockSupportTest extends JSR
321                  assertNull(x);  // ok
322                  if (millisElapsedSince(startTime) > LONG_DELAY_MS)
323                      fail("timed out");
324 +                if (t.getState() == Thread.State.TERMINATED)
325 +                    break;
326                  Thread.yield();
327              }
328          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines