On Mon, 9 Jun 2025 21:38:22 GMT, Kevin Rushforth <k...@openjdk.org> wrote:

> > I'd looked at that but it was not obvious. And it definitely is not obvious 
> > that it will be the same thread that initialises the 
> > MaskMarlinAlphaConsumer.java class
> 
> Yes, I see what you are saying. The `ALPHA_MASK_XXX` arrays are static fields 
> of `MaskMarlinAlphaConsumer`, and the renderer context class has an instance 
> field of `MaskMarlinAlphaConsumer`. So it does seem possible that 
> `MaskMarlinAlphaConsumer` could be initialized by a thread other than the 
> prism renderer thread. Hmmm.

Fortunately, the presence of following field in RendererConext does not cause 
the MaskMarlinAlphaConsumer class to be initialized:


    public MaskMarlinAlphaConsumer consumer = null;


I instrumented the code, adding something that _did_ force initialization and 
was able to provoke a WrongThreadException. Without my modification, 
MaskMarlinAlphaConsumer doesn't get initialized until rendering.

This seems _very_ fragile, though. At best, presuming we can prove that 
initialization and access to MaskMarlinAlphaConsumer always happens on the 
Prism rendering thread, this is an accident waiting to happen.

@bourgesl Do you have any thoughts on this? Using the shared arena is 
definitely safer, but there might be a performance penalty.

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

PR Comment: https://git.openjdk.org/jfx/pull/1814#issuecomment-2957147725

Reply via email to