diff --git a/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/PinnedObjectSupportImpl.java b/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/PinnedObjectSupportImpl.java index 53da311c5200..01764f86de4a 100644 --- a/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/PinnedObjectSupportImpl.java +++ b/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/PinnedObjectSupportImpl.java @@ -65,6 +65,6 @@ private static void modifyPinnedObjectCount(Object object, int delta) { oldValue = pinnedObjectCount.readInt(0); } while (!pinnedObjectCount.logicCompareAndSwapInt(0, oldValue, oldValue + delta, NamedLocationIdentity.OFF_HEAP_LOCATION)); - assert oldValue < Integer.MAX_VALUE; + assert oldValue >= 0 && oldValue < Integer.MAX_VALUE && oldValue + delta >= 0; } } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/handles/PinnedPrimitiveArrayViewSupportImpl.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/handles/PinnedPrimitiveArrayViewSupportImpl.java index 4dededcd63f8..c92b455b9d95 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/handles/PinnedPrimitiveArrayViewSupportImpl.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/handles/PinnedPrimitiveArrayViewSupportImpl.java @@ -24,14 +24,13 @@ */ package com.oracle.svm.core.handles; -import com.oracle.svm.core.Uninterruptible; -import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature; -import com.oracle.svm.core.feature.InternalFeature; - import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.PinnedObject; import org.graalvm.word.PointerBase; +import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature; +import com.oracle.svm.core.feature.InternalFeature; + @AutomaticallyRegisteredFeature final class PinnedPrimitiveArrayViewFeature implements InternalFeature { @Override @@ -51,7 +50,6 @@ static final class PinnedPrimitiveElementArrayReferenceImpl implements Primitive } @Override - @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) public void close() { pinnedObject.close(); } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIThreadLocalPrimitiveArrayViews.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIThreadLocalPrimitiveArrayViews.java index 890e7d0737e2..e7bcb118e85f 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIThreadLocalPrimitiveArrayViews.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/JNIThreadLocalPrimitiveArrayViews.java @@ -32,25 +32,25 @@ import com.oracle.svm.core.threadlocal.FastThreadLocalObject; /** - * Manages per-thread lists of referenced objects for safe direct memory access from native code. + * Manages per-thread lists of referenced arrays for safe direct memory access from native code. */ public class JNIThreadLocalPrimitiveArrayViews { - private static class ReferencedObjectListNode { - final PrimitiveArrayView object; - ReferencedObjectListNode next; + private static class ReferencedArrayListNode { + final PrimitiveArrayView array; + ReferencedArrayListNode next; - ReferencedObjectListNode(PrimitiveArrayView object, ReferencedObjectListNode next) { - this.object = object; + ReferencedArrayListNode(PrimitiveArrayView array, ReferencedArrayListNode next) { + this.array = array; this.next = next; } } - private static final FastThreadLocalObject referencedObjectsListHead = FastThreadLocalFactory.createObject(ReferencedObjectListNode.class, - "JNIThreadLocalReferencedObjects.referencedObjectsListHead"); + private static final FastThreadLocalObject referencedArraysListHead = FastThreadLocalFactory.createObject(ReferencedArrayListNode.class, + "JNIThreadLocalPrimitiveArrayViews.referencedArraysListHead"); public static PrimitiveArrayView createArrayView(Object array) { PrimitiveArrayView ref = PrimitiveArrayView.createForReading(array); - referencedObjectsListHead.set(new ReferencedObjectListNode(ref, referencedObjectsListHead.get())); + referencedArraysListHead.set(new ReferencedArrayListNode(ref, referencedArraysListHead.get())); return ref; } @@ -59,23 +59,23 @@ public static T createArrayViewAndGetAddress(Object arra } public static void destroyNewestArrayViewByAddress(PointerBase address, int mode) { - ReferencedObjectListNode previous = null; - ReferencedObjectListNode current = referencedObjectsListHead.get(); + ReferencedArrayListNode previous = null; + ReferencedArrayListNode current = referencedArraysListHead.get(); while (current != null) { - if (current.object.addressOfArrayElement(0) == address) { + if (current.array.addressOfArrayElement(0) == address) { if (previous != null) { previous.next = current.next; } else { - referencedObjectsListHead.set(current.next); + referencedArraysListHead.set(current.next); } if (mode == 0 || mode == JNIMode.JNI_COMMIT()) { - current.object.syncToHeap(); + current.array.syncToHeap(); } if (mode == 0 || mode == JNIMode.JNI_ABORT()) { - current.object.close(); + current.array.close(); } else { - current.object.untrack(); + current.array.untrack(); } return; } @@ -86,7 +86,7 @@ public static void destroyNewestArrayViewByAddress(PointerBase address, int mode static int getCount() { int count = 0; - ReferencedObjectListNode node = referencedObjectsListHead.get(); + ReferencedArrayListNode node = referencedArraysListHead.get(); while (node != null) { count++; node = node.next;