[OpenJDK 2D-Dev] RFR: 6847157: java.lang.NullPointerException: HDC for component at sun.java2d.loops.Blit.Blit
Sergey Bylokhov
serb at openjdk.java.net
Mon Oct 26 20:04:33 UTC 2020
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.
-------------
Commit messages:
- Update RepaintOnAWTShutdown.java
- Initial fix
Changes: https://git.openjdk.java.net/jdk/pull/870/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=870&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-6847157
Stats: 94 lines in 2 files changed: 93 ins; 0 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/870.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/870/head:pull/870
PR: https://git.openjdk.java.net/jdk/pull/870
More information about the 2d-dev
mailing list