mirror of
https://github.com/netbirdio/gomobile-tvos-fork.git
synced 2026-05-22 18:43:29 -07:00
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:
Vendored
+5
-5
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user