热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

OpenSSL_add_all_digests函数不是thread-safe的

项目中,多个线程同时执行OpenSSL_add_all_digests()函数,crash了,backtrace如下#00x00007f5e93f5d536inlh_insert()

项目中,多个线程同时执行 OpenSSL_add_all_digests() 函数,crash了,backtrace 如下

#0  0x00007f5e93f5d536 in lh_insert () from /usr/lib64/libcrypto.so.10
#1 0x00007f5e93f068fb in OBJ_NAME_add () from /usr/lib64/libcrypto.so.10
#2 0x00007f5e93f66766 in EVP_add_digest () from /usr/lib64/libcrypto.so.10
#3 0x00007f5e93f6ae6d in OpenSSL_add_all_digests () from /usr/lib64/libcrypto.so.10
......
原因在于:OpenSSL_add_all_digests() 函数不是 thread-safe 的

解决:在调用 OpenSSL_add_all_digests() 的地方加多线程保护


P.S.

gtest 目前还不支持多线程的 assert 玩法。

(gtest 的assert 要求在返回值类型为 void 的函数中调用,但是多线程的线程函数返回值类型是 void *)



推荐阅读
author-avatar
wInnIe小店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有