bind: pin Go objects while incrementing their reference count

When passing a refnum across the language barrier there is a small
window where a proxy object itself can be garbage collected, its
reference count go to 0 and the object be gone when the refnum
is dereferenced on the other side.

In Go the proxy object is pinned with runtime.KeepAlive. This CL
implements the same mechanism in Java by passing the proxy object to
native code, ensuring the Java GC can't reclaim it during the call.

Change-Id: I23824439012eb00f90d729f59d4846999f24f01f
Reviewed-on: https://go-review.googlesource.com/107095
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
Elias Naur
2018-04-17 15:00:19 +00:00
parent e7d878f9d0
commit 60d29bfb46
16 changed files with 43 additions and 40 deletions
+5 -5
View File
@@ -87,7 +87,7 @@ public abstract class Java {
private final int refnum;
@Override public final int incRefnum() {
Seq.incGoRef(refnum);
Seq.incGoRef(refnum, this);
return refnum;
}
@@ -99,7 +99,7 @@ public abstract class Java {
private final int refnum;
@Override public final int incRefnum() {
Seq.incGoRef(refnum);
Seq.incGoRef(refnum, this);
return refnum;
}
@@ -111,7 +111,7 @@ public abstract class Java {
private final int refnum;
@Override public final int incRefnum() {
Seq.incGoRef(refnum);
Seq.incGoRef(refnum, this);
return refnum;
}
@@ -123,7 +123,7 @@ public abstract class Java {
private final int refnum;
@Override public final int incRefnum() {
Seq.incGoRef(refnum);
Seq.incGoRef(refnum, this);
return refnum;
}
@@ -134,7 +134,7 @@ public abstract class Java {
private final int refnum;
@Override public final int incRefnum() {
Seq.incGoRef(refnum);
Seq.incGoRef(refnum, this);
return refnum;
}