作者:wInnIe小店 | 来源:互联网 | 2023-09-05 12:23
项目中,多个线程同时执行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 *)