On 8/29/2011 11:36 PM, Clemens Eisserer wrote:
Hi,

    we had a short offline discussion with Oleg, and we both agree there
    is no need to clear the event queue explicitly. If the interrupt()
    call comes from AppContext.dispose(), a new EDT will not be
    initialized (because of the check for AppContext.isDisposed() in
    initDispatchThread()).


Thanks, I updated both versions of the patch with the comment suggested
by Dave (however my englisch is not perfect, so please feel free to
modify it as you like):
http://cr.openjdk.java.net/~ceisserer/7081670/webrev_full.03/
http://cr.openjdk.java.net/~ceisserer/7081670/webrev_minimal.01/

I'm fine with EventDispatchThread.java changes from the full version. Are the pushPopLock.isHeldByCurrentThread() checks required, given that EDT.interrupt() is now respected?

If the "full" version is considered too risky for JDK7, it would be
great if the minimal could make it in, as caciocavallo-web gets bitten
by this bug.

Once approved, the fix should go to JDK8 workspace first. Then it will be backported to JDK7u.

The "minimal" version has a more extensive comment, as for the "minimal"
version the check for isHeldByCurrentThread is not just cosmetic but
required.

    So your "full" version of the fix looks fine. As a sanity check,
    please run all the tests from test/java/awt/EQ and test/java/awt/EDT
    with your changes, it shouldn't take much time.


I ran the tests, but EventDispatchThread/LoopRobustness fails with:

    Caused by: java.lang.RuntimeException: Die, AWT-Event Queue thread!
         at HostileCrasher.<clinit>(LoopRobustness.java:157)
         ... 23 more
    Exception in thread "main" java.lang.RuntimeException: Test FAILED:
    second thread hasn't notified MainThread
         at LoopRobustness.main(LoopRobustness.java:70)

Hmm... That's odd. The test passes on my Windows desktop. The first stack trace is printed to the console, but it's expected as e.printStackTrace() is called from the test. However, the second exception thrown from LoopRobustness.java:70 looks the real problem.

  and HandleExceptionOnEDT seems to time out somehow:

    Exception in thread "main" sun.awt.SunToolkit$OperationTimedOut: 10005
         at sun.awt.X11.XToolkit.syncNativeQueue(XToolkit.java:2443)
         at sun.awt.SunToolkit.realSync(SunToolkit.java:1580)
         at sun.awt.SunToolkit.realSync(SunToolkit.java:1512)
         at test.java.awt.regtesthelpers.Util.waitForIdle(Util.java:184)
         at HandleExceptionOnEDT.main(HandleExceptionOnEDT.java:75)

realSync() is known to behave this way on some X11 systems. This failure doesn't seem to be caused by your fix.

However, I get exatly the same behaviour with the proprietary release
build of JDK7,
so I guess those tests have been broken before. Are those tests executed
before release?

Thanks, Clemens

Thanks,

Artem

Reply via email to