[OpenJDK 2D-Dev] [9] Review Request: 8158072 Need a test for JDK-7172749

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Fri May 27 19:36:28 UTC 2016


On 27.05.16 22:17, Phil Race wrote:
> I suppose this will pass on the various platforms and pipelines since
> we've only seen the bug reported against xrender ? ....

Long time ago we had the similar issues on other platforms:
https://bugs.openjdk.java.net/browse/JDK-7112642

So I assume that it should not fail on all configurations(tested 
ogl/xrender+linux/osx). But I intentionally added more draw operations 
and didn't restrict the test on Xrender pipeline, on each platform 
default will be selected and tested.

>
>  41  * @bug 8158072
>
> I think you should also include 7172749 on this line.

updated:
http://cr.openjdk.java.net/~serb/8158072/webrev.01

> On 05/27/2016 11:47 AM, Sergey Bylokhov wrote:
>> Hello.
>> Please review the new test for jdk9.
>> To me the reason of JDK-7172749 [1] falling was curious. So I decided
>> to dig into it.
>>
>> To reproduce the bug the next sequence is necessary:
>> Thread A
>>  - create the surface
>>  - SG2D is created for the surface
>>  - SG2D.drawLine is called
>>  - XRRenderer(Pipe).drawLine is called
>>  - ========= STOP "THREAD A" for a nanoseconds=========
>>
>> Thread B
>>  - SG2D is created for the surface create in Thread A
>>  - SG2D.drawLine is called or any other draw operations.
>>  - The surface is flushed.
>>
>> Thread A
>>  -  ========= RUN "THREAD A" again=========
>>  - (we still inside XRRenderer(Pipe).drawLine)
>>  - SG2D.getCompClip() is called, and this caused revalidation of SG2D,
>> because it was already flushed. This means that the surface/pipes etc
>> are changed, but note we still in the old XRRenderer(PixelDrawPipe)
>> which actually should be disposed as well
>>  - we try to use the new surface and got ClassCastException.
>>  - After the fix we will start to draw the line again from
>> "SG2D.drawLine" above, using new surface and the new PixelDrawPipe.
>>
>> The interesting thing is how we will work if revalidation will replace
>> the surface to the same type(so ClassCastException will not occurred)
>> but the pipe will be changed to the new? I cannot prove it but it
>> seems that we will draw something to the new surface using the old
>> PixelDrawPipe. (But this is only for the record if someone will work
>> on this/or similar issues).
>>
>> And the test which reproduce the bug.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8158072
>> Webrev can be found at:
>> http://cr.openjdk.java.net/~serb/8158072/webrev.00
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-7172749
>>
>


-- 
Best regards, Sergey.



More information about the 2d-dev mailing list