Add a makeInaccessible callback to ResourceSupport #11703
This commit is contained in:
parent
9ba0b16f41
commit
2896e73e7a
|
@ -96,7 +96,7 @@ class MemSegBuffer extends AdaptableBuffer<MemSegBuffer> implements Buffer, Read
|
|||
private boolean constBuffer;
|
||||
|
||||
MemSegBuffer(MemorySegment base, MemorySegment view, Drop<MemSegBuffer> drop, AllocatorControl control) {
|
||||
super(new MakeInaccisbleOnDrop(ArcDrop.wrap(drop)));
|
||||
super(ArcDrop.wrap(drop));
|
||||
this.control = control;
|
||||
this.base = base;
|
||||
seg = view;
|
||||
|
@ -108,7 +108,7 @@ class MemSegBuffer extends AdaptableBuffer<MemSegBuffer> implements Buffer, Read
|
|||
* Constructor for {@linkplain BufferAllocator#constBufferSupplier(byte[]) const buffers}.
|
||||
*/
|
||||
MemSegBuffer(MemSegBuffer parent) {
|
||||
super(new MakeInaccisbleOnDrop(new ArcDrop<>(ArcDrop.acquire(parent.unsafeGetDrop()))));
|
||||
super(new ArcDrop<>(ArcDrop.acquire(parent.unsafeGetDrop())));
|
||||
control = parent.control;
|
||||
base = parent.base;
|
||||
seg = parent.seg;
|
||||
|
@ -119,42 +119,14 @@ class MemSegBuffer extends AdaptableBuffer<MemSegBuffer> implements Buffer, Read
|
|||
constBuffer = true;
|
||||
}
|
||||
|
||||
private static final class MakeInaccisbleOnDrop implements Drop<MemSegBuffer> {
|
||||
final Drop<MemSegBuffer> delegate;
|
||||
|
||||
private MakeInaccisbleOnDrop(Drop<MemSegBuffer> delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drop(MemSegBuffer buf) {
|
||||
try {
|
||||
delegate.drop(buf);
|
||||
} finally {
|
||||
buf.makeInaccessible();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attach(MemSegBuffer buf) {
|
||||
delegate.attach(buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MemSegDrop(" + delegate + ')';
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Drop<MemSegBuffer> unsafeGetDrop() {
|
||||
MakeInaccisbleOnDrop drop = (MakeInaccisbleOnDrop) super.unsafeGetDrop();
|
||||
return drop.delegate;
|
||||
return super.unsafeGetDrop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void unsafeSetDrop(Drop<MemSegBuffer> replacement) {
|
||||
super.unsafeSetDrop(new MakeInaccisbleOnDrop(replacement));
|
||||
super.unsafeSetDrop(replacement);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1121,7 +1093,6 @@ class MemSegBuffer extends AdaptableBuffer<MemSegBuffer> implements Buffer, Read
|
|||
var isConst = constBuffer;
|
||||
MemorySegment transferSegment = seg;
|
||||
MemorySegment base = this.base;
|
||||
makeInaccessible();
|
||||
return new Owned<MemSegBuffer>() {
|
||||
@Override
|
||||
public MemSegBuffer transferOwnership(Drop<MemSegBuffer> drop) {
|
||||
|
@ -1138,7 +1109,7 @@ class MemSegBuffer extends AdaptableBuffer<MemSegBuffer> implements Buffer, Read
|
|||
};
|
||||
}
|
||||
|
||||
void makeInaccessible() {
|
||||
protected void makeInaccessible() {
|
||||
base = CLOSED_SEGMENT;
|
||||
seg = CLOSED_SEGMENT;
|
||||
wseg = CLOSED_SEGMENT;
|
||||
|
|
Loading…
Reference in New Issue