Skip to content

Commit 915088d

Browse files
committed
bugfix in CApiTransitions (transfer = false)
1 parent 1142e55 commit 915088d

File tree

1 file changed

+10
-9
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/transitions

1 file changed

+10
-9
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/transitions/CApiTransitions.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -652,10 +652,9 @@ protected boolean needsTransfer() {
652652
}
653653

654654
@Specialization
655-
static Object doNative(PythonAbstractNativeObject obj,
655+
Object doNative(PythonAbstractNativeObject obj,
656656
@Cached PCallCapiFunction callAddRef) {
657-
boolean transfer = false;
658-
if (transfer) {
657+
if (needsTransfer()) {
659658
callAddRef.call(NativeCAPISymbol.FUN_ADDREF, obj.object, 1);
660659
}
661660
return obj.getPtr();
@@ -892,19 +891,21 @@ private static long addNativeRefCount(long pointer, long refCntDelta) {
892891
assert (refCount & 0xFFFFFFFF00000000L) == 0 : String.format("suspicious refcnt value during managed adjustment for %016x (%d %016x + %d)\n", pointer, refCount, refCount, refCntDelta);
893892
assert (refCount + refCntDelta) > 0 : String.format("refcnt reached zero during managed adjustment for %016x (%d %016x + %d)\n", pointer, refCount, refCount, refCntDelta);
894893

895-
refCount += refCntDelta;
896-
UNSAFE.putLong(pointer + TP_REFCNT_OFFSET, refCount);
897-
return refCount;
894+
LOGGER.finest(() -> PythonUtils.formatJString("addNativeRefCount %x %x %d + %d", pointer, refCount, refCount, refCntDelta));
895+
896+
UNSAFE.putLong(pointer + TP_REFCNT_OFFSET, refCount + refCntDelta);
897+
return refCount + refCntDelta;
898898
}
899899

900900
private static long subNativeRefCount(long pointer, long refCntDelta) {
901901
long refCount = UNSAFE.getLong(pointer + TP_REFCNT_OFFSET);
902902
assert (refCount & 0xFFFFFFFF00000000L) == 0 : String.format("suspicious refcnt value during managed adjustment for %016x (%d %016x + %d)\n", pointer, refCount, refCount, refCntDelta);
903903
assert (refCount - refCntDelta) >= 0 : String.format("refcnt below zero during managed adjustment for %016x (%d %016x + %d)\n", pointer, refCount, refCount, refCntDelta);
904904

905-
refCount -= refCntDelta;
906-
UNSAFE.putLong(pointer + TP_REFCNT_OFFSET, refCount);
907-
return refCount;
905+
LOGGER.finest(() -> PythonUtils.formatJString("subNativeRefCount %x %x %d + %d", pointer, refCount, refCount, refCntDelta));
906+
907+
UNSAFE.putLong(pointer + TP_REFCNT_OFFSET, refCount - refCntDelta);
908+
return refCount - refCntDelta;
908909
}
909910

910911
private static Object createAbstractNativeObject(Object obj, boolean transfer, long pointer) {

0 commit comments

Comments
 (0)