This PR fixes NPE thrown when trying to update D3D texture in some rare 
scenarios.

On more stressful cases (like the one using Canvas attached to this issue) it 
is possible that a D3DTexture.update() call will go through after the Resource 
Pool already pruned the underlying Texture's resource. This in turn caused an 
NPE, which propagated to higher levels and disrupted the rendering loop, 
causing the Canvas to not be drawn anymore. The update() call seems not to be 
called more than once on an already freed resource, suggesting this is some 
sort of rare race between the pool and the drawing code.

This change prevents the NPE from being thrown. I noticed no visual problems 
with the test even when the update() call is rejected by the newly added check. 
Best way to verify it is to add a log call inside added `if 
(!resource.isValid())` blocks when running the test, it will occasionally get 
printed but the test itself won't change its behavior like it does without this 
change.

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

Commit messages:
 - Add isValid checks to D3DTexture.update()

Changes: https://git.openjdk.org/jfx/pull/1951/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1951&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8352209
  Stats: 8 lines in 1 file changed: 8 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jfx/pull/1951.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1951/head:pull/1951

PR: https://git.openjdk.org/jfx/pull/1951

Reply via email to