<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" 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 11 (filtered medium)">
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="City"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="place"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<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;}
 /* 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:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:9.0pt;
        font-family:SimSun;}
 /* Page Definitions */
 @page Section1
        {size:595.3pt 841.9pt;
        margin:72.0pt 126.65pt 72.0pt 126.65pt;
        layout-grid:15.6pt;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=ZH-CN link=blue vlink=purple style='text-justify-trim:punctuation'>

<div class=Section1 style='layout-grid:15.6pt'>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'>Thanks Daniel for the info.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'>But I still have a question, since
we already make the call <b><u><span style='font-weight:bold'>qemudDomainCreate</span></u></b>
synced, why do we need to introduce a bitmap to resolve the problem of getting
VNC port conflict error? If <b><u><span style='font-weight:bold'>qemudDomainCreate</span></u></b>
is synced, then there should not any problem with VNC port.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'>Looking forward to your reply.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>static virDomainPtr
qemudDomainCreate(virConnectPtr conn, const char *xml,<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>                                     
unsigned int flags) {<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>    struct qemud_driver
*driver = conn->privateData;<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>    virDomainDefPtr def;<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>    virDomainObjPtr vm =
NULL;<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>    virDomainPtr dom = NULL;<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>    virDomainEventPtr event
= NULL;<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>   
virCheckFlags(VIR_DOMAIN_START_PAUSED, NULL);<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US
style='font-size:10.0pt;font-family:"Courier New"'>  <font color=blue><span
style='color:blue'>  qemuDriverLock(driver); <== <o:p></o:p></span></font></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'>Thanks,<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=2 face=Arial><span lang=EN-US
style='font-size:10.0pt;font-family:Arial'>Guangya<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>-----Original Message-----<br>
From: Daniel P. Berrange [mailto:berrange@redhat.com] <br>
Sent: Tuesday, November 09, 2010 9:47 PM<br>
To: Guangya Liu<br>
Cc: <st1:PersonName w:st="on">libvir-list@redhat.com</st1:PersonName><br>
Subject: Re: [libvirt] race condtion in getting VNC port for libvirt</span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>On Sun, Nov 07, 2010 at 08:53:32PM +0800, Guangya Liu
wrote:<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> Hi,<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>>  <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> We are encountering a problem of race conditions
for getting VNC port<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> when VM start up.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>>  <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> In a very powerful hypervisor, if we try to start
up more than 1 VM<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> concurrently, then there might be some VMs failed
to start up due to VNC<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> port confilict.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>>  <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> We searched libvirt bugs and found that some one
report the problem and<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> we have give a fix, but the fix can not resolve
the problem.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>>  <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>>
http://osdir.com/ml/libvir-list/2010-05/msg00530.html<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>>  <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>>
https://build.opensuse.org/package/view_file?file=vnc-race-3.patch&packa<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> ge=libvirt&project=Virtualization:openSUSE11.3<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>This patch is already merged in current GIT repos.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> The bitmap test-and-set operation is not atomic,
so that there still is<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>> a time-window in which a VNC port could be
reserved for two caller. <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>The virBitmap APIs for getting & setting don't need
to be atomic, because<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>they are only called when the QEMU driver mutex is
held, which ensures<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>serialization of VM startup.<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US><o:p> </o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>Regards,<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>Daniel<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>-- <o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>|: Red Hat, Engineering, <st1:City w:st="on"><st1:place
 w:st="on">London</st1:place></st1:City>    -o-  
http://people.redhat.com/berrange/ :|<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>|: http://libvirt.org -o- http://virt-manager.org -o-
http://deltacloud.org :|<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>|: http://autobuild.org        -o-        
http://search.cpan.org/~danberr/ :|<o:p></o:p></span></font></p>

<p class=MsoPlainText><font size=1 face=宋体><span lang=EN-US
style='font-size:9.0pt'>|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1
B3DF F742 7D3B 9505 :|<o:p></o:p></span></font></p>

</div>

</body>

</html>