On 5/23/2016 10:31 AM, Sergey Bylokhov wrote:
I guess calling the SGE.displayChanged() on some random thread is incorrect, there is no any synchronization, so these threads can be executed in parallel, and
I agree the synchronization is required for Win32GraphicsEnvironment#displayChanged()
this can cause more issues if some client code can be executed on this thread. It seems the right fix would be: - Check that there is no any client code on this path(including all listeners).
User code is not supposed to be called on the display change except for the device level listeners.
 - Updates the internal state of SGE on the toolkit thread.
This will not be possible because of deadlock: the SGE update calls D3D, which synchronously send messages to the toolkit thread.
- Notify all listeners on related EDT(if there is some users code) or directly on the toolkit thread if there is only our code.
Yes, the window's listeners should be called on the EDT they belong to. But the window peer does not implement that on Windows. It should be fixed. Other listeners are not supposed to call the user code and since the system EDT is absent there are no other way to execute them.

I think that XToolkit and LWToolkit should uses this logic already.
On Windows communication with the graphics pipeline is designed differently.

--Semyon

On 29.04.16 9:56, Semyon Sadetsky wrote:
Hello,

Please review fix for JDK9:

bug: https://bugs.openjdk.java.net/browse/JDK-8061637
webrev: http://cr.openjdk.java.net/~ssadetsky/8061637/webrev.00/

Display reconfiguration notification is skipped by JavaWS and the plugin
under Windows.
This happens because native display change event is scheduled to the
main app context EDT but the last was disabled by 8004584. As result NPE
is thrown on the Toolkit thread and event handling is not scheduled.
The fix solution runs display event handling in a new thread if the
system EDT is not available.
Test would require to write native code so the bug is labeled noreg-hard.

--Semyon



Reply via email to