Hi Sergey,

Unfortunately I don't have a concise test case which reproduces the issue. The issue is seen with a large application running for a long period of time. At the same time, the issue can be seen with additional debug prints in AWT functions.

I'll attach “debug prints” patch to the bug as well as a demo app which demonstrates this problem exists.

Regards,
Alexey

On 13.10.2015 18:38, Sergey Bylokhov wrote:
Hi, Alexey.
Can you attach the test, which can be used to check the fix, to the bugreport?

On 13.10.15 13:15, Alexey Ivanov wrote:
I guess you didn't add the test for a good reason,
could you please comment on that?
It's impossible to write a regression test because the failure could be
caught only from the native AWT code, no user code could detect it.
Additionally, the time it takes to reproduce the issue is indefinite.

Regards,
Alexey

Thanks
alexp

On 10/12/2015 12:11, Alexey Ivanov wrote:
Hello,

Please review the fix for jdk9:
    bug: https://bugs.openjdk.java.net/browse/JDK-8130136
webrev: http://cr.openjdk.java.net/~aivanov/8130136/jdk9/webrev.00/


Problem description:
Sometimes a window fails to repaint when it becomes exposed.

When repaint failure occurs, SetDIBitsToDevice() in
GDIBlitLoops_nativeBlit() returns 0 with error 87 ("Parameter
Error"). It happens because invalid, already released, hDC is passed
to SetDIBitsToDevice().


Root cause:
When a window is disposed, the DCs associated with it are released.
The handles can be reused for another window.

A thread disposes the window and releases hDC. At this time, DC
handle is reused for another window. When Disposer thread cleans up
for a died thread, it tries to release the cached hDC. But that
handle is already associated with another window. Thus a valid pair
hWnd/hDC becomes invalid: painting to released DC fails.


The fix:
Save both hDC and hWnd in the thread local storage, and pair hDC with
hWnd when removing it to avoid accidentally releasing hDC which is
already reused for another window.


Regards,
Alexey





Reply via email to