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