<Swing Dev> RFR: 8197825: [Test] Intermiitent timeout with javax/swing JColorChooser Test [v3]
Alexey Ivanov
aivanov at openjdk.java.net
Thu Jan 28 11:59:42 UTC 2021
On Thu, 28 Jan 2021 09:59:22 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
>> Please take a look at the "AwtToolkit::Dispose()" method, on how much stuff should be done to properly shutdown the toolkit. This Dispose() method is executed immediately when we exit the message loop in the "Java_sun_awt_windows_WToolkit_eventLoop". So when the shutdown hook is executed we should have the message loop, then we call tk.QuitMessageLoop to stop it, and wait until all code in the Dispose() is executed. But since the IsDisposed() return false we for unknow reason hang, does it mean that the message loop still operates? Or we got some error during "QuitMessageLoop"?
>
> It seems in successful run, when the test finish
> - AwtToolkit::MessageLoop starts
> - DoQuitMessageLoop is called
> - AwtToolkit::QuitMessageLoop starts
> - AwtToolkit::QuitMessageLoop finishes
> - AwtToolkit::MessageLoop finish
> - Dispose() is called, m_isDisposed sets to true
> - shutdown hook isDisposed is true so no infinite loop
>
> During unsuccessful run,
> - AwtToolkit::MessageLoop starts
> - DoQuitMessageLoop is called
> - AwtToolkit::QuitMessageLoop starts
> - AwtToolkit::QuitMessageLoop finishes
> - AwtToolkit::MessageLoop NEVER ends so Dispose() is not called so m_isDisposed is not set to true so shutdown hook goes in infinite loop.
I was looking at the code yesterday. Could it be because of synchronisation? I mean, do we need to use native synchronisation to guarantee variable changes are seen across the threads?
Does MessageLoop not receive Quit / Null message?
-------------
PR: https://git.openjdk.java.net/jdk/pull/2220
More information about the swing-dev
mailing list