【JNI开发】DeleteLocalRef删除全局引用引发的bug
今天做C# JNI开发的时候遇到了一个BUG,我做这玩意也有半年了,踩过的坑多得数不过来,结果这个BUG我排查用了三个小时,特地发出来给大伙品鉴一下
JDK是openjdk17,在我的主机上属于是稳定复现,别的主机上我没有测试过
总之,在将全局引用传入DeleteLocalRef函数后,该全局引用所表现出来的其他内容仍然正常,比如GetObjectRefType返回的结果是JNIGlobalRefType,但它本身实际上与null等价,会引发java.lang.NullPointerException,IsSameObject与null的返回值也是true
这一过程没有任何的报错,比如典中典Invalid Memory Access,或者是JVM fatal error,仅仅会让被删除的全局引用变成实际上的null,所以这个问题还是比较难排查的
看到互联网上没有关于这个BUG的描述,不知道是只有我的JDK有这个情况还是搞JNI的人太少了,特地发出来防止遇到相同问题的大伙搜不到解决方案

浙公网安备 33010602011771号