[foreign-memaccess+abi] RFR: 8294986: Possible mismatched acquire/release in binding specializer [v2]

Jorn Vernee jvernee at openjdk.org
Tue Oct 11 16:03:19 UTC 2022


On Tue, 11 Oct 2022 15:54:41 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

>> We acquire sessions of address parameters before a downcall, and release them afterwards. However, if acquire fails with an exception, we still call release in the finally block.
>> 
>> Fixing this is a simple case of switching 2 lines: when acquire fails, we don't store the session in a local, and so the cleanup in the finally block will not call release on it either.
>> 
>> For testing, I doesn't seem possible to make this bug result in an error with the current code. So, I've added an assert to the implementation that checks whether release was called too many times.
>
> Jorn Vernee has updated the pull request incrementally with one additional commit since the last revision:
> 
>   don't use assert

src/java.base/share/classes/jdk/internal/foreign/ConfinedSession.java line 89:

> 87:             state = CLOSED;
> 88:         } else {
> 89:             throw alreadyAcquired(state - asyncCount);

I figured the exception message should take asyncCount into account as well. either both are 0, or state  - asynCount should be 0 for close to succeed. So, if we get here, we should always get a non-zero value in the exception message.

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

PR: https://git.openjdk.org/panama-foreign/pull/739


More information about the panama-dev mailing list