我们在多线程环境中有使用openSSL
版本的服务。1.0.2h
第一个线程运行阻塞读取,另一个线程正在执行定期写入。
它不时libssl.so
在SSL_write
功能内部的某个地方崩溃。代码调用SSL_write
看起来绝对合法,它使用分配在调用函数堆栈上的缓冲区进行操作。崩溃也非常罕见,这表明它可能是竞争条件。
我发现下面的文章说,在两个线程中使用一个SSL
对象,一个用于读取和写入的线程是不安全的,尽管CRYPTO_set_locking_callback
已设置。那是对的吗?如果是,那么解决此问题的建议方法是什么?如果我阻止mutex
阻塞读取,我将无法写入。