我们有一个 Java 服务器(Linux 64 位)应用程序,它使用本机代码进行处理。本机代码还处理所有多线程问题,并且最近通过使用boost::context
.
我们现在面临的问题是AttachCurrentThread
光纤交换线程失败。经过一些长时间的调试和测试,我们找到了造成这种情况的原因:JVM 似乎拒绝了与创建时给出的堆栈指针不同的线程。
我们通过简单地从带有修改(但有效)的 pthread 附加到 JVM 来验证这一点,该 pthread在被修改rsp
时失败rsp
。
一个可能的解决方法是引入某种事件处理机制来将回调与光纤交换线程分离,但我真的很想避免这种情况。
有人知道解决方法吗?
是否可以禁用堆栈检查(Oracle Java 1.7.0_40,64 位)?
我们可以修改本机 pthread 以指向正确的堆栈帧(我怀疑我们可以)吗?(我们不能提前设置栈帧)。