Code Review 7021010: java/lang/Thread/ThreadStateTest.java fails intermittently
David.Holmes at oracle.com
Tue Jun 21 10:49:22 UTC 2011
Mandy Chung said the following on 06/21/11 20:08:
> On 6/20/11 8:54 PM, Chris Hegarty wrote:
>> java/lang/Thread/ThreadStateTest.java can fail with when
>> checkThreadState finds an unexpected state.
>> Exception in thread "main" java.lang.RuntimeException: MyThread
>> expected to have TERMINATED but got RUNNABLE
>> at ThreadStateTest.checkThreadState(ThreadStateTest.java:119)
>> at ThreadStateTest.main(ThreadStateTest.java:96)
>> There is a race between the thread being put in a specific state and
>> the thread testing for that state. The test should retry the thread
>> state check a number of times before failing. Also, some minor cleanup
>> and update to use a more recent j.u.c reusable synchronization barrier.
> L130-116: I agree with David that this test is not needed.
> Like the RuntimeException listed in ProblemList.txt shows
> that the target thread is in WAITING state but expected to
> be RUNNABLE.
> L98: Are you seeing some timing issue if you keep this checkThreadState
> before the join and thus you moved it after the join?
> As to David's comment about the use of Phaser that delays the thread
> from making the state change. The test was modified to use
> ThreadExecutionSynchronizer as a fix to:
> 5039275 ThreadBlockedCount jtreg test fails on Solaris sparc on
> service_sdk nightly
> ThreadExecutionSynchronizer.signal() actually awaits until the
> main thread calls waitForSignal. If I understand correctly, it's
> essentially doing the same thing as Phaser.arriveAndAwaitAdvance().
> So Chris' change to use Phaser only follows the existing code.
Thanks Mandy I missed that detail.
> I thinkThreadExecutionSynchronizer was initially created to fix
> ThreadBlockCount testthat can make sure the thread enters the BLOCKED
> state an exact number of times and applied to other tests as it
> yields tighter timing window but might not be necessary.
> Anyway, like David said, it isn't incorrect. If you don't have
> time to eliminate the need of the main thread to loop, I'm fine
> with the change to use Phaser but worths tuning the sleep time in L117.
More information about the core-libs-dev