我已经为库创建了一个带有swig的JNI包装器。我使用swig director来回调JVM。其中一些回调发生在本机库中创建的线程上。非JVM线程上的第一个回调失败了一个SIGSEGV,我可以追踪到忽略AttachCurrentThread的负返回值(-1),从而解除引用实际为null的jenv指针。这发生在swig生成的代码中。
我试图通过我在本机创建的线程中的director类回调到JVM。这很好用。然而,它确实无法使用我包装的库创建的线程。
AttachCurrentThread失败的原因是什么?
答案 0 :(得分:1)
当一个线程没有足够的堆栈空间时,AttachCurrentThread失败。遗憾的是,Oracle JVM的文档没有提到AttachCurrentThread工作所需的最小堆栈空间。
在我的情况下,本机库针对嵌入式硬件进行了优化,因此通常创建堆栈大小为100000字节的线程。