OpenSSL_add_all_digests 函数不是 thread-safe 的

项目中,多个线程同时执行 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 *)


你可能感兴趣的:(OpenSSL_add_all_digests 函数不是 thread-safe 的)