Env* _bcAttachThreadFromCallback(void) { Env* env = NULL; if (rvmAttachCurrentThread(vm, &env, NULL, NULL) != JNI_OK) { rvmAbort("Failed to attach thread in callback"); } return env; }
static jint AttachCurrentThread(JavaVM* vm, void** penv, void* args) { char* name = NULL; Object* group = NULL; if (args) { name = ((JavaVMAttachArgs*) args)->name; group = (Object*) ((JavaVMAttachArgs*) group)->name; } return rvmAttachCurrentThread((VM*) vm, (Env**) penv, name, group); }
jboolean rvmDestroyVM(VM* vm) { Env* env; if (JNI_OK != rvmAttachCurrentThread(vm, &env, NULL, NULL) ) { WARN("rvmDestroy() failed to attach current thread."); return FALSE; } Object* throwable = rvmExceptionOccurred(env); rvmDetachCurrentThread(env->vm, TRUE, FALSE); rvmJoinNonDaemonThreads(env); return throwable == NULL ? TRUE : FALSE; }