JNI:AttachCurrentThread returns -1
JNI: AttachCurrentThread returns -1
我已经为一个库创建了一个带有 swig 的 JNI 包装器。我使用 swig 控制器回调 JVM。其中一些回调发生在本机库中创建的线程上。非 JVM 线程上的第一个回调因 SIGSEGV 失败,我可以追溯到忽略 AttachCurrentThread 的负 return 值 (-1),从而取消引用实际上为 null 的 jenv 指针。这发生在 swig 生成的代码中。
我试图从我在本机端创建的线程通过导向器 类 回调到 JVM。这很好用。但是,它不适用于我包装的库创建的线程。
AttachCurrentThread 失败的可能原因是什么?
当线程没有足够的堆栈时 space 离开 AttachCurrentThread 失败。不幸的是,Oracle JVM 的文档没有提到 AttachCurrentThread 工作所需的最低堆栈 space。
在我的例子中,本机库针对嵌入式硬件进行了优化,因此创建的线程通常堆栈大小为 100000 字节。
我已经为一个库创建了一个带有 swig 的 JNI 包装器。我使用 swig 控制器回调 JVM。其中一些回调发生在本机库中创建的线程上。非 JVM 线程上的第一个回调因 SIGSEGV 失败,我可以追溯到忽略 AttachCurrentThread 的负 return 值 (-1),从而取消引用实际上为 null 的 jenv 指针。这发生在 swig 生成的代码中。
我试图从我在本机端创建的线程通过导向器 类 回调到 JVM。这很好用。但是,它不适用于我包装的库创建的线程。
AttachCurrentThread 失败的可能原因是什么?
当线程没有足够的堆栈时 space 离开 AttachCurrentThread 失败。不幸的是,Oracle JVM 的文档没有提到 AttachCurrentThread 工作所需的最低堆栈 space。
在我的例子中,本机库针对嵌入式硬件进行了优化,因此创建的线程通常堆栈大小为 100000 字节。