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

Comparing jsr166/src/test/tck/ReentrantReadWriteLockTest.java (file contents):
Revision 1.48 by jsr166, Mon May 2 00:06:45 2011 UTC vs.
Revision 1.55 by jsr166, Mon May 2 01:15:26 2011 UTC

# Line 59 | Line 59 | public class ReentrantReadWriteLockTest
59      }
60  
61      /**
62 <     * Releases lock, checking that it had a hold count of 1.
62 >     * Releases write lock, checking that it had a hold count of 1.
63       */
64 <    void releaseLock(ReentrantReadWriteLock.WriteLock lock) {
65 <        assertTrue(lock.isHeldByCurrentThread());
66 <        lock.unlock();
67 <        assertFalse(lock.isHeldByCurrentThread());
64 >    void releaseWriteLock(ReentrantReadWriteLock lock) {
65 >        ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();
66 >        assertTrue(writeLock.isHeldByCurrentThread());
67 >        writeLock.unlock();
68 >        assertFalse(writeLock.isHeldByCurrentThread());
69      }
70  
71      /**
# Line 207 | Line 208 | public class ReentrantReadWriteLockTest
208  
209          Thread.sleep(SHORT_DELAY_MS);
210          t.interrupt();
211 <        t.join();
212 <        releaseLock(lock.writeLock());
211 >        awaitTermination(t, LONG_DELAY_MS);
212 >        releaseWriteLock(lock);
213      }
214  
215      /**
# Line 224 | Line 225 | public class ReentrantReadWriteLockTest
225  
226          Thread.sleep(SHORT_DELAY_MS);
227          t.interrupt();
228 <        t.join();
229 <        releaseLock(lock.writeLock());
228 >        awaitTermination(t, LONG_DELAY_MS);
229 >        releaseWriteLock(lock);
230      }
231  
232      /**
# Line 241 | Line 242 | public class ReentrantReadWriteLockTest
242  
243          Thread.sleep(SHORT_DELAY_MS);
244          t.interrupt();
245 <        t.join();
246 <        releaseLock(lock.writeLock());
245 >        awaitTermination(t, LONG_DELAY_MS);
246 >        releaseWriteLock(lock);
247      }
248  
249      /**
# Line 258 | Line 259 | public class ReentrantReadWriteLockTest
259  
260          Thread.sleep(SHORT_DELAY_MS);
261          t.interrupt();
262 <        t.join();
262 >        awaitTermination(t, LONG_DELAY_MS);
263 >        releaseWriteLock(lock);
264      }
265  
266  
# Line 273 | Line 275 | public class ReentrantReadWriteLockTest
275                  assertFalse(lock.writeLock().tryLock());
276              }});
277  
278 <        t.join();
279 <        lock.writeLock().unlock();
278 >        awaitTermination(t, LONG_DELAY_MS);
279 >        releaseWriteLock(lock);
280      }
281  
282      /**
# Line 288 | Line 290 | public class ReentrantReadWriteLockTest
290                  assertFalse(lock.readLock().tryLock());
291              }});
292  
293 <        t.join();
294 <        lock.writeLock().unlock();
293 >        awaitTermination(t, LONG_DELAY_MS);
294 >        releaseWriteLock(lock);
295      }
296  
297      /**
# Line 304 | Line 306 | public class ReentrantReadWriteLockTest
306                  lock.readLock().unlock();
307              }});
308  
309 <        t.join();
309 >        awaitTermination(t, LONG_DELAY_MS);
310          lock.readLock().unlock();
311      }
312  
# Line 327 | Line 329 | public class ReentrantReadWriteLockTest
329  
330          Thread.sleep(SHORT_DELAY_MS);
331          lock.readLock().unlock();
332 <        t1.join(MEDIUM_DELAY_MS);
333 <        t2.join(MEDIUM_DELAY_MS);
332 <        assertTrue(!t1.isAlive());
333 <        assertTrue(!t2.isAlive());
332 >        awaitTermination(t1, LONG_DELAY_MS);
333 >        awaitTermination(t2, LONG_DELAY_MS);
334      }
335  
336      /**
# Line 351 | Line 351 | public class ReentrantReadWriteLockTest
351              }});
352  
353          Thread.sleep(SHORT_DELAY_MS);
354 <        lock.writeLock().unlock();
355 <        t1.join(MEDIUM_DELAY_MS);
356 <        t2.join(MEDIUM_DELAY_MS);
357 <        assertTrue(!t1.isAlive());
358 <        assertTrue(!t2.isAlive());
354 >        assertTrue(t1.isAlive());
355 >        assertTrue(t2.isAlive());
356 >        releaseWriteLock(lock);
357 >        awaitTermination(t1, LONG_DELAY_MS);
358 >        awaitTermination(t2, LONG_DELAY_MS);
359      }
360  
361      /**
# Line 393 | Line 393 | public class ReentrantReadWriteLockTest
393          lock.readLock().lock();
394          lock.readLock().unlock();
395          lock.writeLock().unlock();
396 <        t1.join(MEDIUM_DELAY_MS);
397 <        t2.join(MEDIUM_DELAY_MS);
398 <        assertTrue(!t1.isAlive());
399 <        assertTrue(!t2.isAlive());
396 >        awaitTermination(t1, LONG_DELAY_MS);
397 >        awaitTermination(t2, LONG_DELAY_MS);
398      }
399  
400      /**
# Line 423 | Line 421 | public class ReentrantReadWriteLockTest
421          lock.readLock().lock();
422          lock.readLock().unlock();
423          lock.writeLock().unlock();
424 <        t1.join(MEDIUM_DELAY_MS);
425 <        t2.join(MEDIUM_DELAY_MS);
428 <        assertTrue(!t1.isAlive());
429 <        assertTrue(!t2.isAlive());
424 >        awaitTermination(t1, LONG_DELAY_MS);
425 >        awaitTermination(t2, LONG_DELAY_MS);
426      }
427  
428  
# Line 454 | Line 450 | public class ReentrantReadWriteLockTest
450          lock.writeLock().lock();
451          lock.writeLock().unlock();
452          lock.writeLock().unlock();
453 <        t1.join(MEDIUM_DELAY_MS);
454 <        t2.join(MEDIUM_DELAY_MS);
459 <        assertTrue(!t1.isAlive());
460 <        assertTrue(!t2.isAlive());
453 >        awaitTermination(t1, LONG_DELAY_MS);
454 >        awaitTermination(t2, LONG_DELAY_MS);
455      }
456  
457  
# Line 496 | Line 490 | public class ReentrantReadWriteLockTest
490          lock.readLock().lock();
491          lock.readLock().unlock();
492          lock.writeLock().unlock();
493 <        t1.join(MEDIUM_DELAY_MS);
494 <        t2.join(MEDIUM_DELAY_MS);
501 <        assertTrue(!t1.isAlive());
502 <        assertTrue(!t2.isAlive());
493 >        awaitTermination(t1, LONG_DELAY_MS);
494 >        awaitTermination(t2, LONG_DELAY_MS);
495      }
496  
497  
# Line 527 | Line 519 | public class ReentrantReadWriteLockTest
519          lock.readLock().lock();
520          lock.readLock().unlock();
521          lock.writeLock().unlock();
522 <        t1.join(MEDIUM_DELAY_MS);
523 <        t2.join(MEDIUM_DELAY_MS);
532 <        assertTrue(!t1.isAlive());
533 <        assertTrue(!t2.isAlive());
522 >        awaitTermination(t1, LONG_DELAY_MS);
523 >        awaitTermination(t2, LONG_DELAY_MS);
524      }
525  
526  
# Line 561 | Line 551 | public class ReentrantReadWriteLockTest
551          lock.writeLock().lock();
552          lock.writeLock().unlock();
553          lock.writeLock().unlock();
554 <        t1.join(MEDIUM_DELAY_MS);
555 <        t2.join(MEDIUM_DELAY_MS);
566 <        assertTrue(!t1.isAlive());
567 <        assertTrue(!t2.isAlive());
554 >        awaitTermination(t1, LONG_DELAY_MS);
555 >        awaitTermination(t2, LONG_DELAY_MS);
556      }
557  
558  
# Line 580 | Line 568 | public class ReentrantReadWriteLockTest
568                  lock.readLock().unlock();
569              }});
570  
571 <        t.join();
571 >        awaitTermination(t, LONG_DELAY_MS);
572          lock.readLock().unlock();
573      }
574  
# Line 595 | Line 583 | public class ReentrantReadWriteLockTest
583                  assertFalse(lock.writeLock().tryLock());
584              }});
585  
586 <        t.join();
586 >        awaitTermination(t, LONG_DELAY_MS);
587          lock.readLock().unlock();
588      }
589  
# Line 612 | Line 600 | public class ReentrantReadWriteLockTest
600                  lock.readLock().unlock();
601              }});
602  
603 <        t.join();
603 >        awaitTermination(t, LONG_DELAY_MS);
604          lock.readLock().unlock();
605      }
606  
# Line 629 | Line 617 | public class ReentrantReadWriteLockTest
617                  assertFalse(lock.writeLock().tryLock());
618              }});
619  
620 <        t.join();
620 >        awaitTermination(t, LONG_DELAY_MS);
621          lock.readLock().unlock();
622      }
623  
# Line 646 | Line 634 | public class ReentrantReadWriteLockTest
634                  assertFalse(lock.writeLock().tryLock(1, MILLISECONDS));
635              }});
636  
637 <        t.join();
637 >        awaitTermination(t, LONG_DELAY_MS);
638          assertTrue(lock.writeLock().isHeldByCurrentThread());
639          lock.writeLock().unlock();
640      }
# Line 662 | Line 650 | public class ReentrantReadWriteLockTest
650                  assertFalse(lock.readLock().tryLock(1, MILLISECONDS));
651              }});
652  
653 <        t.join();
653 >        awaitTermination(t, LONG_DELAY_MS);
654          assertTrue(lock.writeLock().isHeldByCurrentThread());
655          lock.writeLock().unlock();
656      }
# Line 681 | Line 669 | public class ReentrantReadWriteLockTest
669  
670          Thread.sleep(SHORT_DELAY_MS);
671          t.interrupt();
672 <        Thread.sleep(SHORT_DELAY_MS);
673 <        t.join();
686 <        lock.writeLock().unlock();
672 >        awaitTermination(t, LONG_DELAY_MS);
673 >        releaseWriteLock(lock);
674      }
675  
676      /**
# Line 699 | Line 686 | public class ReentrantReadWriteLockTest
686  
687          Thread.sleep(SHORT_DELAY_MS);
688          t.interrupt();
689 <        t.join();
690 <        lock.writeLock().unlock();
689 >        awaitTermination(t, LONG_DELAY_MS);
690 >        releaseWriteLock(lock);
691      }
692  
693      /**
# Line 781 | Line 768 | public class ReentrantReadWriteLockTest
768          lock.writeLock().lock();
769          c.signal();
770          lock.writeLock().unlock();
771 <        t.join(SHORT_DELAY_MS);
785 <        assertFalse(t.isAlive());
771 >        awaitTermination(t, LONG_DELAY_MS);
772      }
773  
774      /** A helper class for uninterruptible wait tests */
# Line 835 | Line 821 | public class ReentrantReadWriteLockTest
821              lock.writeLock().unlock();
822          }
823  
824 <        thread.join();
824 >        awaitTermination(thread, LONG_DELAY_MS);
825          assertTrue(thread.interrupted);
840        assertFalse(thread.isAlive());
826      }
827  
828      /**
# Line 846 | Line 831 | public class ReentrantReadWriteLockTest
831      public void testAwait_Interrupt() throws InterruptedException {
832          final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
833          final Condition c = lock.writeLock().newCondition();
834 +        final CountDownLatch locked = new CountDownLatch(1);
835          Thread t = newStartedThread(new CheckedInterruptedRunnable() {
836              public void realRun() throws InterruptedException {
837                  lock.writeLock().lock();
838 <                c.await();
839 <                lock.writeLock().unlock();
838 >                assertTrue(lock.isWriteLocked());
839 >                locked.countDown();
840 >                try { c.await(); }
841 >                finally { lock.writeLock().unlock(); }
842              }});
843  
844 <        Thread.sleep(SHORT_DELAY_MS);
844 >        locked.await();
845 >        while (lock.isWriteLocked())
846 >            Thread.yield();
847          t.interrupt();
848 <        t.join(SHORT_DELAY_MS);
849 <        assertFalse(t.isAlive());
848 >        awaitTermination(t, LONG_DELAY_MS);
849 >        assertFalse(lock.isWriteLocked());
850      }
851  
852      /**
# Line 865 | Line 855 | public class ReentrantReadWriteLockTest
855      public void testAwaitNanos_Interrupt() throws InterruptedException {
856          final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
857          final Condition c = lock.writeLock().newCondition();
858 +        final CountDownLatch locked = new CountDownLatch(1);
859          Thread t = newStartedThread(new CheckedInterruptedRunnable() {
860              public void realRun() throws InterruptedException {
861                  lock.writeLock().lock();
862 <                c.awaitNanos(MILLISECONDS.toNanos(LONG_DELAY_MS));
863 <                lock.writeLock().unlock();
862 >                assertTrue(lock.isWriteLocked());
863 >                locked.countDown();
864 >                try { c.awaitNanos(MILLISECONDS.toNanos(LONG_DELAY_MS)); }
865 >                finally { lock.writeLock().unlock(); }
866              }});
867  
868 <        Thread.sleep(SHORT_DELAY_MS);
868 >        locked.await();
869 >        while (lock.isWriteLocked())
870 >            Thread.yield();
871          t.interrupt();
872 <        t.join(SHORT_DELAY_MS);
873 <        assertFalse(t.isAlive());
872 >        awaitTermination(t, LONG_DELAY_MS);
873 >        assertFalse(lock.isWriteLocked());
874      }
875  
876      /**
# Line 884 | Line 879 | public class ReentrantReadWriteLockTest
879      public void testAwaitUntil_Interrupt() throws InterruptedException {
880          final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
881          final Condition c = lock.writeLock().newCondition();
882 +        final CountDownLatch locked = new CountDownLatch(1);
883          Thread t = newStartedThread(new CheckedInterruptedRunnable() {
884              public void realRun() throws InterruptedException {
885                  lock.writeLock().lock();
886 +                assertTrue(lock.isWriteLocked());
887 +                locked.countDown();
888                  java.util.Date d = new java.util.Date();
889 <                c.awaitUntil(new java.util.Date(d.getTime() + 10000));
890 <                lock.writeLock().unlock();
889 >                try { c.awaitUntil(new java.util.Date(d.getTime() + 10000)); }
890 >                finally { lock.writeLock().unlock(); }
891              }});
892  
893 <        Thread.sleep(SHORT_DELAY_MS);
893 >        locked.await();
894 >        while (lock.isWriteLocked())
895 >            Thread.yield();
896          t.interrupt();
897 <        t.join(SHORT_DELAY_MS);
898 <        assertFalse(t.isAlive());
897 >        awaitTermination(t, LONG_DELAY_MS);
898 >        assertFalse(lock.isWriteLocked());
899      }
900  
901      /**
# Line 922 | Line 922 | public class ReentrantReadWriteLockTest
922          lock.writeLock().lock();
923          c.signalAll();
924          lock.writeLock().unlock();
925 <        t1.join(SHORT_DELAY_MS);
926 <        t2.join(SHORT_DELAY_MS);
927 <        assertFalse(t1.isAlive());
928 <        assertFalse(t2.isAlive());
925 >        awaitTermination(t1, LONG_DELAY_MS);
926 >        awaitTermination(t2, LONG_DELAY_MS);
927      }
928  
929      /**
# Line 969 | Line 967 | public class ReentrantReadWriteLockTest
967          lock.writeLock().unlock();
968          Thread.sleep(SHORT_DELAY_MS);
969          assertFalse(lock.hasQueuedThreads());
970 <        t1.join();
971 <        t2.join();
970 >        awaitTermination(t1, LONG_DELAY_MS);
971 >        awaitTermination(t2, LONG_DELAY_MS);
972      }
973  
974      /**
# Line 1010 | Line 1008 | public class ReentrantReadWriteLockTest
1008          assertFalse(sync.hasQueuedThread(t1));
1009          Thread.sleep(SHORT_DELAY_MS);
1010          assertFalse(sync.hasQueuedThread(t2));
1011 <        t1.join();
1012 <        t2.join();
1011 >        awaitTermination(t1, LONG_DELAY_MS);
1012 >        awaitTermination(t2, LONG_DELAY_MS);
1013      }
1014  
1015  
# Line 1036 | Line 1034 | public class ReentrantReadWriteLockTest
1034          lock.writeLock().unlock();
1035          Thread.sleep(SHORT_DELAY_MS);
1036          assertEquals(0, lock.getQueueLength());
1037 <        t1.join();
1038 <        t2.join();
1037 >        awaitTermination(t1, LONG_DELAY_MS);
1038 >        awaitTermination(t2, LONG_DELAY_MS);
1039      }
1040  
1041      /**
# Line 1064 | Line 1062 | public class ReentrantReadWriteLockTest
1062          lock.writeLock().unlock();
1063          Thread.sleep(SHORT_DELAY_MS);
1064          assertTrue(lock.getQueuedThreads().isEmpty());
1065 <        t1.join();
1066 <        t2.join();
1065 >        awaitTermination(t1, LONG_DELAY_MS);
1066 >        awaitTermination(t2, LONG_DELAY_MS);
1067      }
1068  
1069      /**
# Line 1206 | Line 1204 | public class ReentrantReadWriteLockTest
1204          assertFalse(lock.hasWaiters(c));
1205          assertEquals(0, lock.getWaitQueueLength(c));
1206          lock.writeLock().unlock();
1207 <        t.join(SHORT_DELAY_MS);
1210 <        assertFalse(t.isAlive());
1207 >        awaitTermination(t, LONG_DELAY_MS);
1208      }
1209  
1210      /**
# Line 1236 | Line 1233 | public class ReentrantReadWriteLockTest
1233          assertFalse(lock.hasWaiters(c));
1234          assertEquals(0, lock.getWaitQueueLength(c));
1235          lock.writeLock().unlock();
1236 <        t.join(SHORT_DELAY_MS);
1240 <        assertFalse(t.isAlive());
1236 >        awaitTermination(t, LONG_DELAY_MS);
1237      }
1238  
1239  
# Line 1281 | Line 1277 | public class ReentrantReadWriteLockTest
1277          assertFalse(lock.hasWaiters(c));
1278          assertTrue(lock.getWaitingThreads(c).isEmpty());
1279          lock.writeLock().unlock();
1280 <        t1.join(SHORT_DELAY_MS);
1281 <        t2.join(SHORT_DELAY_MS);
1286 <        assertFalse(t1.isAlive());
1287 <        assertFalse(t2.isAlive());
1280 >        awaitTermination(t1, LONG_DELAY_MS);
1281 >        awaitTermination(t2, LONG_DELAY_MS);
1282      }
1283  
1284      /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines