On Thu, 30 Oct 2025 14:08:38 GMT, Lukasz Kostyra <[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.
>
> Lukasz Kostyra has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   BaseContext: Add maskTex checks to flushMask()

modules/javafx.graphics/src/main/java/com/sun/prism/d3d/D3DTextureResource.java 
line 41:

> 39:         if (resource != null) {
> 40:             resource.dispose();
> 41:             resource = null;

We do not set the resource to `null` for any classes like `D3DTextureResource`, 
`MTLTextureResource` or `ES2TextureResource`. But the actual reference to 
native resource is set to **0** in the `resource.dispose();` call ( i.e. in 
classes like, `D3DTextureData`, `MTLTextureData`, `ES2TextureData` ). So the 
actual dispose of resource is already guarded.

Setting null only for D3D may cause confusion, as to why is it not done for 
other pipelines.
So, I would recommend to remove, as current code is safe. Or
add the same for other pipelines as well.

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

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

Reply via email to