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

Reply via email to