--- jsr166/src/test/tck/SemaphoreTest.java 2011/05/31 16:16:24 1.29 +++ jsr166/src/test/tck/SemaphoreTest.java 2011/06/03 05:07:14 1.30 @@ -223,7 +223,7 @@ public class SemaphoreTest extends JSR16 public void testInterruptible_tryAcquireTimedN_fair() { testInterruptible(true, AcquireMethod.tryAcquireTimedN); } public void testInterruptible(boolean fair, final AcquireMethod acquirer) { final PublicSemaphore s = new PublicSemaphore(0, fair); - final Semaphore anotherInterruptPlease = new Semaphore(0, fair); + final Semaphore pleaseInterrupt = new Semaphore(0, fair); Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { // Interrupt before acquire @@ -246,7 +246,7 @@ public class SemaphoreTest extends JSR16 shouldThrow(); } catch (InterruptedException success) {} - anotherInterruptPlease.release(); + pleaseInterrupt.release(); // Interrupt during acquire(N) try { @@ -257,9 +257,7 @@ public class SemaphoreTest extends JSR16 waitForQueuedThread(s, t); t.interrupt(); - try { - assertTrue(anotherInterruptPlease.tryAcquire(LONG_DELAY_MS, MILLISECONDS)); - } catch (InterruptedException e) { threadUnexpectedException(e); } + await(pleaseInterrupt); waitForQueuedThread(s, t); t.interrupt(); awaitTermination(t); @@ -275,34 +273,37 @@ public class SemaphoreTest extends JSR16 public void testUninterruptible_acquireUninterruptiblyN_fair() { testUninterruptible(true, AcquireMethod.acquireUninterruptiblyN); } public void testUninterruptible(boolean fair, final AcquireMethod acquirer) { final PublicSemaphore s = new PublicSemaphore(0, fair); - final Semaphore anotherInterruptPlease = new Semaphore(0, fair); - Thread t = newStartedThread(new CheckedRunnable() { + final Semaphore pleaseInterrupt = new Semaphore(-1, fair); + + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { // Interrupt before acquire + pleaseInterrupt.release(); Thread.currentThread().interrupt(); acquirer.acquire(s); assertTrue(Thread.interrupted()); + }}); - anotherInterruptPlease.release(); - + Thread t2 = newStartedThread(new CheckedRunnable() { + public void realRun() throws InterruptedException { // Interrupt during acquire + pleaseInterrupt.release(); acquirer.acquire(s); assertTrue(Thread.interrupted()); }}); - waitForQueuedThread(s, t); - assertThreadStaysAlive(t); - s.release(); + await(pleaseInterrupt); + waitForQueuedThread(s, t1); + waitForQueuedThread(s, t2); + t2.interrupt(); - try { - assertTrue(anotherInterruptPlease.tryAcquire(LONG_DELAY_MS, MILLISECONDS)); - } catch (InterruptedException e) { threadUnexpectedException(e); } - waitForQueuedThread(s, t); - t.interrupt(); - assertThreadStaysAlive(t); - s.release(); + assertThreadStaysAlive(t1); + assertTrue(t2.isAlive()); - awaitTermination(t); + s.release(2); + + awaitTermination(t1); + awaitTermination(t2); } /**