2
0
mirror of synced 2025-02-23 14:58:12 +00:00
mobile/bind/testdata/issue12403.java.golden
Elias Naur 60d29bfb46 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>
2018-04-17 15:00:19 +00:00

52 lines
1.3 KiB
Plaintext

// Java class issue12403.Parsable is a proxy for talking to a Go program.
// gobind -lang=java issue12403
//
// File is generated by gobind. Do not edit.
package issue12403;
import go.Seq;
public interface Parsable {
public String fromJSON(String jstr);
public String toJSON() throws Exception;
}
// Java class issue12403.Issue12403 is a proxy for talking to a Go program.
// gobind -lang=java issue12403
//
// File is generated by gobind. Do not edit.
package issue12403;
import go.Seq;
public abstract class Issue12403 {
static {
Seq.touch(); // for loading the native library
_init();
}
private Issue12403() {} // uninstantiable
// touch is called from other bound packages to initialize this package
public static void touch() {}
private static native void _init();
private static final class proxyParsable implements Seq.Proxy, Parsable {
private final int refnum;
@Override public final int incRefnum() {
Seq.incGoRef(refnum, this);
return refnum;
}
proxyParsable(int refnum) { this.refnum = refnum; Seq.trackGoRef(refnum, this); }
public native String fromJSON(String jstr);
public native String toJSON() throws Exception;
}
}