<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        text-indent:21.0pt;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
/* Page Definitions */
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:294604952;
        mso-list-type:hybrid;
        mso-list-template-ids:218026220 234912290 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;
        color:windowtext;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%2\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:42.0pt;
        text-indent:-21.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:63.0pt;
        text-indent:-21.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:84.0pt;
        text-indent:-21.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%5\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:105.0pt;
        text-indent:-21.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:126.0pt;
        text-indent:-21.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:147.0pt;
        text-indent:-21.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%8\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:168.0pt;
        text-indent:-21.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:189.0pt;
        text-indent:-21.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="ZH-CN" link="blue" vlink="purple" style="text-justify-trim:punctuation">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  I am running libvirt with ESXi driver in multithread scenario to access ESXi by https. Sometimes a core dump will be generated as following:<o:p></o:p></span></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#0  0x0000003f9b030265 in raise () from /lib64/libc.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#1  0x0000003f9b031d10 in abort () from /lib64/libc.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#2  0x0000003f9b06a84b in __libc_message () from /lib64/libc.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#3  0x0000003f9b072fae in _int_malloc () from /lib64/libc.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#4  0x0000003f9b074cde in malloc () from /lib64/libc.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#5  0x0000003f9b07963b in strerror () from /lib64/libc.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#6  0x0000003fa188032a in ERR_load_ERR_strings () from /lib64/libcrypto.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#7  0x0000003fa187fde9 in ERR_load_crypto_strings () from /lib64/libcrypto.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#8  0x0000003fa48309d9 in SSL_load_error_strings () from /lib64/libssl.so.6<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#9  0x00002aaaba8e612e in Curl_ossl_init () from /opt/CSCOppm-unit/hypervisor/libcurl/lib/libcurl.so.4<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#10 0x00002aaaba8ee6c1 in curl_global_init () from /opt/CSCOppm-unit/hypervisor/libcurl/lib/libcurl.so.4<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#11 0x00002aaaba8ee6f8 in curl_easy_init () from /opt/CSCOppm-unit/hypervisor/libcurl/lib/libcurl.so.4<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#12 0x00002aaaba0d932b in esxVI_SessionIsActive (ctx=0x2aaac093ca80, sessionID=0x2aaac06932a0 "`3i\300\252*", userName=0x2aaac0ae6e80
 "root", output=0xffffffffffffffff) at esx/esx_vi_methods.generated.c:599<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%">#13 0x00002aaaba0c7a60 in esxStorageVolumeLookupByKey (conn=0x7412, key=0x76c1 <Address 0x76c1 out of bounds>) at esx/esx_storage_driver.c:825<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span lang="EN-US" style="color:#7F7F7F;mso-style-textfill-fill-color:#7F7F7F;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></i></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">I checked that currently ESXi driver didn’t initialize openssl. Because libcurl will not handle openssl for multi-thread.
 According to openssl API, libvirt should<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">register two methods to support mutli-threads. The detailed description is as following:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="http://www.openssl.org/docs/crypto/threads.html">http://www.openssl.org/docs/crypto/threads.html</a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I have changed code as following:<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1">
<![if !supportLists]><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">     
</span></span></span><![endif]><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">virInitialize() in libvirt.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">Old Code:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">virInitialize(void)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    …<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    virLogSetFromEnv();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    virNetTLSInit();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    …<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">New Code:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">virInitialize(void)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    …<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    virLogSetFromEnv();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    virNetTLSInit();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:21.6pt"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">virOpenSSLInit();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:21.6pt"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">…<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1">
<![if !supportLists]><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">     
</span></span></span><![endif]><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">In virnetServer.c<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">New Code:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">pthread_mutex_t *lock_cs;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">long *lock_count;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">void virOpenSSLLockCallback(int mode, int type, const char *file ATTRIBUTE_UNUSED, int line ATTRIBUTE_UNUSED) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    if (mode & CRYPTO_LOCK)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">        pthread_mutex_lock(&(lock_cs[type]));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">        lock_count[type]++;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    else<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">        pthread_mutex_unlock(&(lock_cs[type]));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">unsigned long virOpenSSLIdCallback(void)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    unsigned long ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    ret=(unsigned long)pthread_self();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    return(ret);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">void virOpenSSLInit(void)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    int i;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    lock_cs=OPENSSL_malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    lock_count=OPENSSL_malloc(CRYPTO_num_locks() * sizeof(long));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    for (i=0; i<CRYPTO_num_locks(); i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">        lock_count[i]=0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">        pthread_mutex_init(&(lock_cs[i]),NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    CRYPTO_set_id_callback(virOpenSSLIdCallback);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">    CRYPTO_set_locking_callback(virOpenSSLLockCallback);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">To be honest, virOpenSSLInit/ virOpenSSLIdCallback/ virOpenSSLLockCallback should not be defined in this file. But It seems
 that Makefile generated by autoconfig can’t<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">handle the new file recursively.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">What about this solution? If you have any comments, please feel free to contact me.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">BTW: If I add a new source/header file, is there a simple way to change Makefile?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">B.R.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%">Benjamin Wang<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#0D0D0D;mso-style-textfill-fill-color:#0D0D0D;mso-style-textfill-fill-alpha:100.0%"><o:p> </o:p></span></p>
</div>
</body>
</html>