On 14.10.15 17:11, Alexander Potochkin wrote:
The fix looks good to me.
+1
Thanks
alexp
Regards,
Alexey
Thanks
alexp
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
--
Best regards, Sergey.