On Tue, 28 Oct 2025 21:28:54 GMT, Andy Goryachev <[email protected]> wrote:

>> 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.
>
> modules/javafx.graphics/src/main/java/com/sun/prism/d3d/D3DTexture.java line 
> 91:
> 
>> 89:     public void update(MediaFrame frame, boolean skipFlush)
>> 90:     {
>> 91:         if (!resource.isValid()) {
> 
> related - D3DTextureResource line 40 is 
> 
> 
>     public void free() {
>         if (resource != null) {
>             resource.dispose();
>         }
>     }
> 
> 
> should there be `resource = null;` after `resource.dispose()` ?

It could add another layer of safety and make any potential future NPEs more 
easy to track - I'll add this.

> modules/javafx.graphics/src/main/java/com/sun/prism/d3d/D3DTexture.java line 
> 93:
> 
>> 91:         if (!resource.isValid()) {
>> 92:             return;
>> 93:         }
> 
> are these the only two places where we need the check?

Yes, as far as I know other Prism-backend-specific resources already do similar 
checks, either Java side or Native side.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1951#discussion_r2472580324
PR Review Comment: https://git.openjdk.org/jfx/pull/1951#discussion_r2472576368

Reply via email to