<AWT Dev> [8] Review request for 2228674: Fix failed for CR 7162144
Artem Ananiev
artem.ananiev at oracle.com
Wed Oct 16 06:24:04 PDT 2013
On 10/16/2013 3:29 PM, Anthony Petrov wrote:
> Hi Oleg,
>
> The fix looks good to me. However, I don't recall all details about this
> machinery, and removing a call to peekEvent() in
> EventQueue.detachDispatchThread() looks a bit scary.
>
> Could Artem or you clarify if AWTAutoShutdown() recreates the EDT if
> there are still events in the queue, or we simply don't care about them?
EQ.detachDispatchThread() is called in two cases: when we caught
ThreadDeath or InterruptedExceptions, and when EDT is interrupted (and
the interrupted flag is not cleared). If this happens, when the current
AppContext is disposed, we simply don't care if any events are pending.
If the thread is interrupted for another reason, it will die anyway, but
the very next incoming event will re-create EDT. In this case, thread
interruption is considered an application bug.
Thanks,
Artem
> --
> best regards,
> Anthony
>
> On 10/16/2013 02:31 PM, Oleg Pekhovskiy wrote:
>> Hi all,
>>
>> please review the fix
>> http://cr.openjdk.java.net/~bagiras/2228674.1/
>> for
>> https://bugs.openjdk.java.net/browse/JDK-2228674
>>
>> The fix covers two scenarios:
>> 1. User code calls EventDispatchThread.interrupt() and then
>> EventDispatchThread.interrupted() which clears interrupted state and
>> EDT doesn't stop.
>>
>> 2. EventDispatchThread.interrupt() is called without clearing the
>> interrupted state (e.g. invocation of AppContext.dispose()) that makes
>> EDT terminate.
>>
>> The other scenario, in which AppContext.dispose() is called from the
>> thread other than EDT and after that EventDispatchThread.interrupted()
>> is called from EDT preventing EDT from termination, is treated like an
>> architecture bug.
>>
>> Some dead code was also removed because detaching of EDT is always
>> forced.
>>
>> Thanks,
>> Oleg
More information about the awt-dev
mailing list