Race condition in TimerTask KillThread test
David Holmes
david.holmes at oracle.com
Mon Nov 7 01:46:25 UTC 2011
On 5/11/2011 8:37 AM, Alan Bateman wrote:
> On 04/11/2011 15:52, Gary Adams wrote:
>> :
>>
>> I'll attempt a simple fix for the KillThread case by replacing :
>>
>> Thread.sleep(100);
>>
>> with a simple loop
>>
>> do {
>> Thread.sleep(100);
>> } while (waiting);
>>
>> where the TimerTask runnable will clear the flag
>> with "waiting = false " once it has been launched.
>>
> I don't think this will guarantee that the timer thread will have
> terminated before the main thread schedules the second event. I think
> this test would be robust if you capture a reference to the timer thread
> in the first task and have the main thread wait or poll until it has a
> reference to the thread. Once it has a reference to the thread then it
> can wait for it to terminate before attempting to schedule the second task.
Agreed. As soon as waiting is set we can switch back to the main thread
and proceed to the next phase of the test - but the timer thread is
still alive at that point. If the issue is checking for thread
termination then we must track that directly.
David
-----
> -Alan.
More information about the core-libs-dev
mailing list