<AWT Dev> [OpenJDK 2D-Dev] [9] Review request for 8130136: Swing window sometimes fails to repaint partially when it becomes exposed
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Thu Oct 15 13:52:11 UTC 2015
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.
More information about the awt-dev
mailing list