[foreign-memaccess+abi] RFR: 8265751: MemoryAddress should have a scope accessor
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Thu Apr 22 11:41:01 UTC 2021
Following the recent API changes, I think `MemoryAddress` has been left in an inconsistent state. On the one hand, we clearly want `MemoryAddress` to have a link to a `ResourceScope`; we clearly state so in the javadoc for:
* `CLinker::upcallStub`
* `MemorySegment::address`
(and we don't say, but we probably should in `VaList::address`).
This link is crucial, as it prevents scope closure, if an address is passed to a native function and the scope is implicit.
However, this dependency is, currently, ad-hoc, and not cleanly stated in the API.
This patch rectifies that; now all memory address have a scope (which can be the "global scope" for addresses obtained from native, or from `long` values).
There are not many changes in terms of implementation, but by putting the association between addresses and scopes front and center we can make the javadoc clearer.
Also, this allows us to move the scope check from `MemorySegment::address` (that has always been a bit odd) to `MemoryAddress::toRawLongAddress` - that is, closer to where the address value is actually used.
This allows us to, effectively, make calls to downcall method handles *safer*, since now a scope check will take place before the raw long value is extracted.
Note that this doesn't negatively affect performance: the check was occurring even before, albeit at a different level (closer to the user code). I've run all the downcall benchmarks we have and found no regressions.
I've added a test which makes sure that passing "closed" segments/addresses to native function is no longer possible.
-------------
Commit messages:
- Fix javadoc/impl of MemoryAddress::segmentOffset
- Add API changes
- Initial push
Changes: https://git.openjdk.java.net/panama-foreign/pull/513/files
Webrev: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=513&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8265751
Stats: 199 lines in 8 files changed: 159 ins; 5 del; 35 mod
Patch: https://git.openjdk.java.net/panama-foreign/pull/513.diff
Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/513/head:pull/513
PR: https://git.openjdk.java.net/panama-foreign/pull/513
More information about the panama-dev
mailing list