首页 > 解决方案 > 为什么在 netty-tcnative 中没有卸载 certificateVerifierTask_class

问题描述

看了netty-tcnative的源码sslcontext.c,发现「certificateVerifierTask_class」是在「netty_internal_tcnative_SSLContext_JNI_OnLoad」方法中加载的</p>

jint netty_internal_tcnative_SSLContext_JNI_OnLoad(JNIEnv* env, const char* packagePrefix) {

  .....

    NETTY_JNI_UTIL_PREPEND(packagePrefix, "io/netty/internal/tcnative/CertificateVerifierTask", name, error);
    NETTY_JNI_UTIL_LOAD_CLASS(env, certificateVerifierTask_class, name, error);
  
    NETTY_JNI_UTIL_PREPEND(packagePrefix, "io/netty/internal/tcnative/CertificateVerifier;)V", name, error);
    NETTY_JNI_UTIL_PREPEND("(J[[BLjava/lang/String;L", name, combinedName, error);
    TCN_REASSIGN(name, combinedName);
    NETTY_JNI_UTIL_GET_METHOD(env, certificateVerifierTask_class, certificateVerifierTask_init, "<init>", name, error);
 
  .....

}

但是在方法「netty_internal_tcnative_SSLContext_JNI_OnUnLoad」中,这个类没有被卸载。

void netty_internal_tcnative_SSLContext_JNI_OnUnLoad(JNIEnv* env, const char* packagePrefix) {
    NETTY_JNI_UTIL_UNLOAD_CLASS(env, sslTask_class);
    NETTY_JNI_UTIL_UNLOAD_CLASS(env, certificateCallbackTask_class);
    NETTY_JNI_UTIL_UNLOAD_CLASS(env, sslPrivateKeyMethodTask_class);
    NETTY_JNI_UTIL_UNLOAD_CLASS(env, sslPrivateKeyMethodSignTask_class);
    NETTY_JNI_UTIL_UNLOAD_CLASS(env, sslPrivateKeyMethodDecryptTask_class);

    netty_jni_util_unregister_natives(env, packagePrefix, SSLCONTEXT_CLASSNAME);
}

卸载过程是不必要的吗?

标签: opensslnettyboringssl

解决方案


这实际上是一个错误......非常感谢我刚刚修复它https://github.com/netty/netty-tcnative/pull/637


推荐阅读