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() A more general question: what is the condition for the release of the resource/texture? Does it come from a native call, reference count or something else? It feels like there should be a strict mechanism for this. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1951#issuecomment-3472563993
