openssl DTLS内存泄露问题怎么解决
本人当前开发调试开源项目opencapwap,在使用openssl库建立DTLS连接时出现严重的内存泄露问题。介绍:opencapwap对每个会话建立一个线程,在线程中使用X509证书进行DTLS 的握手连接,成功连接后进行通信,会话结束后,线程退出,线程退出时会调用下列函数来释放openssl的资源。
(参照openssl FQA中针对内存泄露的问题)
ERR_remove_state(0);
ENGINE_cleanup();
CONF_modules_unload(1);
ERR_free_strings();
EVP_cleanup();
CRYPTO_cleanup_all_ex_data();
测试:现通过测试会话线程的反复建立和销毁,发现严重的内存泄露问题,整个进程占用的内存资源不断增大。
分析:使用valgrind进行测试,发现内存泄露位置存在于openssl库中,log如下,从log分析看来每次会话握手协商获取客户端证书时会申请一块内存,但会话线程退出时没有释放。
不知各位大侠有何高见!我弄了一周了,都没有办法,急死我了!求救各位大侠帮忙啊!!!!
log:--------------------------------------------
==19217== 187,068 (3,864 direct, 183,204 indirect) bytes in 42 blocks are definitely lost in loss record 237 of 240
==19217== at 0x4023F50: malloc (vg_replace_malloc.c:236)
==19217== by 0x8090EBF: CRYPTO_malloc (mem.c:328)
==19217== by 0x80B7602: asn1_item_ex_combine_new (tasn_new.c:191)
==19217== by 0x80BA711: ASN1_item_ex_d2i (tasn_dec.c:398)
==19217== by 0x80BAE88: ASN1_item_d2i (tasn_dec.c:134)
==19217== by 0x80B6946: d2i_X509 (x_x509.c:136)
==19217== by 0x807ECB4: ssl3_get_client_certificate (s3_srvr.c:2576)
==19217== by 0x806AB14: dtls1_accept (d1_srvr.c:484)