260 |
|
SHORT_DELAY_MS = getShortDelay(); |
261 |
|
SMALL_DELAY_MS = SHORT_DELAY_MS * 5; |
262 |
|
MEDIUM_DELAY_MS = SHORT_DELAY_MS * 10; |
263 |
< |
LONG_DELAY_MS = SHORT_DELAY_MS * 50; |
263 |
> |
LONG_DELAY_MS = SHORT_DELAY_MS * 200; |
264 |
|
} |
265 |
|
|
266 |
|
/** |
289 |
|
* earlier by threadRecordFailure. |
290 |
|
*/ |
291 |
|
public void tearDown() throws Exception { |
292 |
< |
Throwable t = threadFailure.get(); |
292 |
> |
Throwable t = threadFailure.getAndSet(null); |
293 |
|
if (t != null) { |
294 |
|
if (t instanceof Error) |
295 |
|
throw (Error) t; |
447 |
|
try { |
448 |
|
exec.shutdown(); |
449 |
|
assertTrue("ExecutorService did not terminate in a timely manner", |
450 |
< |
exec.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); |
450 |
> |
exec.awaitTermination(2 * LONG_DELAY_MS, MILLISECONDS)); |
451 |
|
} catch (SecurityException ok) { |
452 |
|
// Allowed in case test doesn't have privs |
453 |
|
} catch (InterruptedException ie) { |
616 |
|
Thread.State s = thread.getState(); |
617 |
|
if (s == Thread.State.BLOCKED || |
618 |
|
s == Thread.State.WAITING || |
619 |
< |
s == Thread.State.TIMED_WAITING || |
620 |
< |
System.nanoTime() - t0 > timeoutNanos) |
619 |
> |
s == Thread.State.TIMED_WAITING) |
620 |
|
return; |
621 |
+ |
else if (s == Thread.State.TERMINATED) |
622 |
+ |
fail("Unexpected thread termination"); |
623 |
+ |
else if (System.nanoTime() - t0 > timeoutNanos) { |
624 |
+ |
threadAssertTrue(thread.isAlive()); |
625 |
+ |
return; |
626 |
+ |
} |
627 |
|
Thread.yield(); |
628 |
|
} |
629 |
|
} |
636 |
|
long millisElapsedSince(long startNanoTime) { |
637 |
|
return NANOSECONDS.toMillis(System.nanoTime() - startNanoTime); |
638 |
|
} |
639 |
< |
|
639 |
> |
|
640 |
|
/** |
641 |
|
* Returns a new started daemon Thread running the given runnable. |
642 |
|
*/ |