mirror of
https://github.com/netbirdio/gomobile-tvos-fork.git
synced 2026-05-22 18:43:29 -07:00
go.mobile/bind/java: support JNI_EDETACHED
LGTM=adonovan R=adonovan CC=golang-codereviews https://golang.org/cl/144780043
This commit is contained in:
+16
-2
@@ -55,6 +55,9 @@ static mem *mem_get(JNIEnv *env, jobject obj) {
|
||||
}
|
||||
|
||||
static uint8_t *mem_read(JNIEnv *env, jobject obj, uint32_t size) {
|
||||
if (size == 0) {
|
||||
return NULL;
|
||||
}
|
||||
mem *m = mem_get(env, obj);
|
||||
if (m == NULL) {
|
||||
LOG_FATAL("mem_read on NULL mem");
|
||||
@@ -101,8 +104,15 @@ static jfieldID find_field(JNIEnv *env, const char *class_name, const char *fiel
|
||||
void init_seq(void *javavm) {
|
||||
JavaVM *vm = (JavaVM*)javavm;
|
||||
JNIEnv *env;
|
||||
if ((*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_6) != JNI_OK) {
|
||||
LOG_FATAL("bad vm env");
|
||||
int res = (*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_6);
|
||||
if (res == JNI_EDETACHED) {
|
||||
JavaVMAttachArgs args;
|
||||
args.version = JNI_VERSION_1_6;
|
||||
if ((*vm)->AttachCurrentThread(vm, &env, &args) != 0) {
|
||||
LOG_FATAL("cannot attach to current_vm");
|
||||
}
|
||||
} else if (res != 0) {
|
||||
LOG_FATAL("bad vm env: %d", res);
|
||||
}
|
||||
|
||||
memptr_id = find_field(env, "go/Seq", "memptr", "J");
|
||||
@@ -111,6 +121,10 @@ void init_seq(void *javavm) {
|
||||
receive_code_id = find_field(env, "go/Seq$Receive", "code", "I");
|
||||
|
||||
LOG_INFO("loaded go/Seq");
|
||||
|
||||
if (res == JNI_EDETACHED) {
|
||||
(*vm)->DetachCurrentThread(vm);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
|
||||
Reference in New Issue
Block a user