RFR: 8296024: Usage of DIrectBuffer::address should be guarded [v9]

Alan Bateman alanb at openjdk.org
Tue Nov 22 12:00:23 UTC 2022


On Tue, 22 Nov 2022 09:29:14 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> Per Minborg has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Rework Acquisition
>
> src/java.base/share/classes/java/nio/Buffer.java line 827:
> 
>> 825: 
>> 826:                 @Override
>> 827:                 public Runnable acquireSessionOrNull(Buffer buffer, boolean async) {
> 
> If allocation/performance is an issue, a relatively straightforward way to adjust the code would be to let go of the TWR entirely. E.g. we have code that does this:
> 
> 
> Buffer b = ...
> try {
>     // use buffer.address();
> } finally {
>     Reference.reachabilityFence(b);
> }
> 
> 
> We could transform to this:
> 
> 
> Buffer b = ...
> acquire(b); // calls MemorySessionImpl.acquire0 if session is not null
> try {
>     // use buffer.address();
> } finally {
>     release(b); // calls MemorySessionImpl.release0 if session is not null (and maybe adds a reachability fence, just in case)
> }
> 
> This leads to a simpler patch that is probably easier to validate. The remaining IOUtil code will be using a different idiom, and perhaps we can, at some point, go back and make that consistent too.

The AutoCloseable experiment was interesting to try but I think you are right, acquire try { .. } finally release would be simpler and also remove the concerns about the performance critical code paths.

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

PR: https://git.openjdk.org/jdk/pull/11260



More information about the security-dev mailing list