On Tue, 8 Sep 2026 17:33:25 GMT, Jorn Vernee <[email protected]> wrote:

>> The methods `load()`, `unload()`, `isLoaded()`, and `force()` in 
>> `MemorySegment` currently delegate to `ScopedMemoryAccess` through a set of 
>> `@Scoped` methods, after which the implementation calls into 
>> `java.nio.MappedMemoryUtils`. This means that, when a shared scope is closed 
>> during a call to one of these methods, an exception can be installed at any 
>> point during the execution of the util method.
>> 
>> The problem is that some parts of these methods are not able to handle such 
>> exceptions being installed.
>> 
>> We've had some previous discussion about these methods not really needing to 
>> be `@Scoped` in the first place, but instead being able to rely on paired 
>> acquire/release of the session being accessed. This code is not as 
>> performance critical compared to a scoped memory access, since we're doing a 
>> native call any way.
>> 
>> To avoid issues with exceptions being installed in surprising places, this 
>> patch switches the named methods to use acquire/release instead of being 
>> `@Scoped`. This changes the behavior of these methods slightly: they now 
>> keep the scope alive during the execution of the method. I've updated the 
>> doc, borrowing from existing text in the `Linked::downcallHandle` docs, to 
>> explain that a scope closure may now fail during the execution of one of 
>> these methods.
>> 
>> Does this seem like the right tradeoff?
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Jorn Vernee has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains eight additional 
> commits since the last revision:
> 
>  - Propagate uncaught exception in forked thread
>  - Merge branch 'master' into MappeNoScoped
>  - tweak comment
>  - Fix issue where release is called even when acquire completes abnormally
>  - Missed one link
>  - Fix links
>  - Add keep-alive docs
>  - Use acquire/release for memory mapped segment operations

LGTM. Thanks for fixing this issue!

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

Marked as reviewed by pminborg (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/31918#pullrequestreview-5151590990

Reply via email to