On Mon, 9 Jun 2025 20:06:22 GMT, Phil Race <p...@openjdk.org> wrote: > Multi-threaded access in the sense of the not being used concurrently by > different threads ? What FFM means is that the thread that creates the Arena > is the only thread ever allowed to use the Arena or any memory allocated by > it. I don't quite see how you guarantee a static field of a class is never > accessed by another thread. And all it takes is for some other thread to have > initialize the class and boom > > And how in fact is Marlin ensuring only one thread is ever used to run Marlin > ? I didn't think it did anything of the kind. Is this just a case of the FX > thread always runs it ?
The QuantumRenderer thread uses Marlin during rendering and the JavaFX application thread uses it during picking. @bourgesl can provide a more complete answer, but from what I see, all accesses to OffHeapArray are done via an instance of the RendererContext class. Marlin ensures that a RendererContext instance is created and accessed on the same thread by using thread local state and using the rendering context for the thread in question (or creating it if it is the first time). See [DMarlinRenderingEngine::getRendererContext](https://github.com/openjdk/jfx/blob/b22ed6d202f7bb3765fa402a748d455f6316f7c9/modules/javafx.graphics/src/main/java/com/sun/marlin/DMarlinRenderingEngine.java#L254). ------------- PR Comment: https://git.openjdk.org/jfx/pull/1814#issuecomment-2957054365