AttachCurrentThread 崩溃
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f810fba15f5, pid=21079, tid=140192045909760
#
# JRE version: Java(TM) SE Runtime Environment (7.0_45-b18) (build 1.7.0_45-b18)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V [libjvm.so+0x6305f5] attach_current_thread+0x1c5
从新创建的线程调用时。
为什么?
我用一个函数needJ调用它,当从主线程调用时它工作正常:
TJavaEnv = record
env: PJNIEnv;
//...
end;
threadvar j: TJavaEnv;
function needJ: TJavaEnv;
var attachArgs: JavaVMAttachArgs;
begin
if j.env = nil then begin
attachArgs.version:=JNI_VERSION_1_2;
attachArgs.name:=nil;
attachArgs.group:=nil;
if jvmref^^.AttachCurrentThread(jvmref,@j.env,@attachArgs) <> 0 then
raise EAndroidInterfaceException.create('Failed to get VM environment');
end;
result := j;
end;
jvmref 在两个调用中是相同的。线程是使用从 TThread 派生的对象创建的,该对象从其 execute 方法调用 needJ。
崩溃发生在 java 6/7 和 openjdk 7 上。但是,在 Android 上它可以工作。