On Mon, 9 Sep 2024 12:57:17 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

> The new test added by https://github.com/openjdk/jdk/pull/20854 fails 
> spuriously.
> While JNI lookup is now moved into the static initializer of the 
> `MappedMemoryUtils` class, this class might only get initialized while in the 
> middle of a scoped context.
> 
> To address this, I created a new proxy interface, namely 
> `MappedMemoryUtilsProxy`. This interface is used by `ScopedMemoryAccess` to 
> call the various `force`/`load`/`isLoaded`/`unload` methods, and a singleton 
> instance is provided inside `MappedMemoryUtils` itself, and then exposed via 
> the `SharedSecrets` mechanism.
> 
> Crucially, `MappedMemorySegmentImpl` will now _first_ obtain a 
> `MappedMemoryUtilsProxy` and _then_ call `ScopedMemoryAccess`. This should 
> move all class initializer side-effects out of the scoped method context.

src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template
 line 255:

> 253:                 session.checkValidStateRaw();
> 254:             }
> 255:             return mappedUtils.isLoaded(address, isSync, size);

this method (and other related methods) now only performs a straight call into 
`MappedMemoryUtilsProxy`. Static initializers and JNI resolution has already 
run, so we should no longer use too much stack.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20914#discussion_r1750259314

Reply via email to