[OpenJDK 2D-Dev] RFR: 6847157: java.lang.NullPointerException: HDC for component at sun.java2d.loops.Blit.Blit

Phil Race prr at openjdk.java.net
Sun Nov 8 21:51:54 UTC 2020


On Mon, 26 Oct 2020 19:45:49 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:

> This is the fix for one suspicious exception which rarely but time to time occurred on the test systems. As described in a few bug reports the use-cases could be quite different, but I was able to reproduce it in one of them.
> 
> Steps to reproduce:
>  1. We draw to the frame for the first time or we draw to the frame on the thread where we never draw before
>  2. As part of step 1. we start initialization of the surface data bounded to this frame for that thread, in the native method
>  3. jtreg decided to kill the test because the main method ends
>  4. As part of step 2. we request HDC for the frame via sendMessage which do nothing since AWT is stopping/dies -> HDC=NULL
>  5. As part of step 1. we try to draw to the surface -> HDC is NULL -> NPE is thrown
> 
> The solution is to mark the surface at step 4. as invalid:
>  - If the AWT will die this surface will never be used and no exception occurs
>  - If the application will continue to work and this surface will be accessed then we will throw InvalidPipeException in attempts to recreate the surface and all related data.

Marked as reviewed by prr (Reviewer).

-------------

PR: https://git.openjdk.java.net/jdk/pull/870


More information about the 2d-dev mailing list