<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/337</link>
<title><![CDATA[libcurl和openssl的冲突和资源释放问题-curl_global_cleanup]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[c程序设计]]></category>
<pubDate>Thu, 25 Sep 2014 16:59:38 +0000</pubDate> 
<guid>http://www.snooda.com/read/337</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;最近程序发现了个奇葩现象，即从文件载入的证书链用openssl校验是通过的，而用curl远程获取的就校验失败，错误码7。而这些内容写入文件在下一次程序启动时载入校验，又是成功的。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;排查了各种内存泄露、不可见字符的可能性后。突然想起来是不是libcurl静态链接了openssl跟主程序动态链接的打架。查看后发现libcurl未静态链接openssl。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 不过这也是一个启示。想起来既然curl也用到了openssl，那么它在最后cleanup的时候会不会把全局的openssl数据结构给释放掉。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 尝试了一下，果然好了。原来我在一个函数里开头调用curl_global_init，结尾调用curl_global_cleanup。这样的话在程序结束时就会释放openssl的全局数据结构。导致后续调用证书校验报错。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 不过openssl也不够友好，报证书签名错误，让人很难联想到是初始化问题。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不过aes加密部分并不受这个影响。<br/>Tags - <a href="http://www.snooda.com/tags/openssllibcurl/" rel="tag">openssllibcurl</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/337#blogcomment177</link>
<title><![CDATA[[评论] libcurl和openssl的冲突和资源释放问题-curl_global_cleanup]]></title> 
<author>ELI &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 19 Apr 2018 02:56:05 +0000</pubDate> 
<guid>http://www.snooda.com/read/337#blogcomment177</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>