程序在极高的压力下运行很长时间出现,md_rand.c:312: ssleay_rand_add: Assertion `md_c[1] == md_count[1]' failed。
原因是编译openssl的CFLAGS没有设置为thread safe,多线程同时调用libcrypto的RAND_add()函数会出断言错误。SSL_connect()和SSL_accept()都会调用RAND_add()。
#if !defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32)
assert(md_c[1] == md_count[1]);
#endif
编译时 -DOPENSSL_THREADS -pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE

本文探讨了在高负载环境下运行OpenSSL时出现的断言失败问题,特别是当CFLAGS未设置为threadsafe时,多线程调用RAND_add()导致的问题。文中提到了SSL_connect()和SSL_accept()都会触发此函数,并提供了编译时的宏定义解决方案。
2万+

被折叠的 条评论
为什么被折叠?



