问题
多线程libcurl运行一段时间后出现崩掉,没有确定的点,没有确定的URL。一直查看源代码没有问题,最后通过debug跟踪发现是在访问SSL的时候出现的crash。
才想起来openssl是不支持多线程的,要自己做加锁处理。而且libcurl中并没有支持相关的加锁操作。
解决办法:
在初始化libcurl的时候为openssl创建一个互斥锁函数,一个回调函数传给openss
openssl锁l函数原形 :void (* func )(int ,int , const char * ,int)
设置方式:CRYPTO_set_locking_callback(void (* func )(int ,int , const char * ,int));
设置这样一个函数还不够,另外还要配置一个锁id回调函数,这个可以参考openssl多线程下的使用相关。
id函数原形:unsigned int (*func)(void)
设置方式: