On 26/08/2011 8:58 AM, Clemens Eisserer wrote:
Hi,

    Yes I understand why you added the check. I'm not sure what you mean
    about hiding the InterruptedException though. As I understood the
    scenario the interrupt() breaks the thread out of await() by throwing
    IE, which is then caught at a higher-level (not sure exactly where), but
    because of further pending events the IE does not cause the EDT to
    detach/terminate but instead it continues to process events eventually
    calling await() again. Then the stop() gets issued which causes the
    await() to abort by throwing ThreadDeath, without reclaiming the Lock,
    and so the unlock in the finally clause throws IllegalMonitorStateException.


Sorry, misunderstanding on my side. I thought when interrupting the thread,
re-claiming the lock would also fail, but it doesn't. Your analysis is
totally correct. So the "full" patch could probably do without the checks,
as it should not run into this condition (even when a ThreadDeath is covered
by IllegalMonitorException, shutodown=true -> no more calls of await()).
However, it doesn't hurt a lot on the other side. What do you think?

As long as it is clearly documented as to why the check is there

David

    I'm no AWT expert either, it just concerns me when there is an
    introduced change in behaviour without a full understanding of the
    implications. We really need some input from an AWT event processing guru.

Absolutly.

Thanks again, Clemens

Reply via email to