[foreign-abi] RFR: 8253823: Investigate ways to make handoff-like operation more explicit

Maurizio Cimadamore mcimadamore at openjdk.java.net
Tue Sep 29 22:06:44 UTC 2020


The API currently doesn't do a good job at differentiating between simple wither-like methods (e.g. withAccessModes)
and deep side-effecting operations (e.g. withOwnerThread).

This patch explores a way to make handoff more of a first-class concept of the API - you can take apart an existing
segment and reconstruct it with a given `HandoffTransform` (a recipe which specifies what properties should be
associated with the reconstructed segment). Turns out that `handoff` and `HandoffTransform` is the ideal place where to
put several of the *advanced* operations we used to have exposed directly by the memory segment API
(`withCleanupAction`, `registerCleaner`). We can also add na overload for `handoff` which takes a native scope and
bounds the segment to it.

By reorganizing the API in this way, it is now clear that memory segment feature _two_ terminal operations: `close` and
`handoff`. We can document this in the API in a more centralized fashion, without having to repeat the same text across
seemingly unrelated methods. For clients, it is also clearer that doing an `handoff` is a big reconstruction, which is
different from a simple wither.

I've also somewhat simplified the access mode story; there's now a single HANDOFF mode which covers all types of
handoff - this was clearly needed, since the access modes we had before were very fine-grained, and it was very painful
for client to prevent against *all* kinds of terminal operations (for instance, I realized that the current impl has no
access modes check for `withCleanupAction`).

Impl note: for now the HandoffTransform implementation is mutable and not thread-safe - the javadoc calls this out. I'm
open to make this more immutable/value oriented if this is desirable.

Note: this PR is against the `foreign-abi` so that it shows how `NativeScope` is affected by the changes. If the
changes brought in this patch looks good, it would be better to push the memory access changes in the `memory-access`
branch in a separate PR, and then follow up with the remaining `NativeScope` changes here.

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

Commit messages:
 - Merge branch 'foreign-abi' into rebuilder-segments
 - Fix javadoc
 - Fix tests
 - Switched to new, simpler API
 - Fix javadoc
 - Add segment rebulders

Changes: https://git.openjdk.java.net/panama-foreign/pull/361/files
 Webrev: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=361&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8253823
  Stats: 711 lines in 26 files changed: 238 ins; 292 del; 181 mod
  Patch: https://git.openjdk.java.net/panama-foreign/pull/361.diff
  Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/361/head:pull/361

PR: https://git.openjdk.java.net/panama-foreign/pull/361


More information about the panama-dev mailing list