<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE>
BLOCKQUOTE {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 2em
}
OL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
UL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
BODY {
        LINE-HEIGHT: 1.5; FONT-FAMILY: Î¢ÈíÑźÚ; COLOR: #000000; FONT-SIZE: 10.5pt
}
</STYLE>

<META name=GENERATOR content="MSHTML 8.00.7600.17267"></HEAD>
<BODY style="MARGIN: 10px">
<DIV>Dear:</DIV>
<DIV> </DIV>
<DIV style="TEXT-INDENT: 2em">I think there was a bug,  when 
attach-interface using xen driver.</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">when I use xen driver to attach interface for 
domain,  the libvirtd will crash.</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">the info with GDB:</DIV>
<DIV>#0 0x00007ffff7571815 in virDomainDiskGetDriver () from 
/usr/lib/libvirt.so.0 </DIV>
<DIV style="TEXT-INDENT: 2em">
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#1 
0x00007fffeb9ad471 in ?? () from 
/usr/lib/libvirt/connection-driver/libvirt_driver_xen.so </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#2 
0x00007fffeb9b1062 in xenDaemonAttachDeviceFlags () from 
/usr/lib/libvirt/connection-driver/libvirt_driver_xen.so </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#3 
0x00007fffeb9a8a86 in ?? () from 
/usr/lib/libvirt/connection-driver/libvirt_driver_xen.so </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#4 
0x00007ffff7609266 in virDomainAttachDevice () from /usr/lib/libvirt.so.0 </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#5 
0x0000555555593c9d in ?? () </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#6 
0x00007ffff76743c9 in virNetServerProgramDispatch () from /usr/lib/libvirt.so.0 
</DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#7 
0x00005555555a678d in ?? () </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#8 
0x00007ffff755460e in ?? () from /usr/lib/libvirt.so.0 </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#9 
0x00007ffff7553b06 in ?? () from /usr/lib/libvirt.so.0 </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#10 
0x00007ffff4998b50 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0 
</DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#11 
0x00007ffff46e30ed in clone () from /lib/x86_64-linux-gnu/libc.so.6 </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#12 
0x0000000000000000 in ?? () </DIV>
<DIV 
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px Î¢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px"> </DIV></DIV>
<DIV style="TEXT-INDENT: 2em">And I think the bug is at the 
function virDomainXMLDevID(), file path:  
src/xen/xend_internal.c</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV 
style="TEXT-INDENT: 2em">--------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em">
<DIV>static int</DIV>
<DIV>virDomainXMLDevID(virConnectPtr conn, virDomainDefPtr def, virDomainDeviceDefPtr dev, char *class,  char *ref, int ref_len)</DIV>
<DIV>{</DIV>
<DIV>    xenUnifiedPrivatePtr priv = conn->privateData;</DIV>
<DIV>    char *xref;</DIV>
<DIV>    char *tmp;</DIV>
<DIV>    const char *driver = virDomainDiskGetDriver(dev->data.disk);</DIV>
<DIV> </DIV>
<DIV>    if (dev->type == VIR_DOMAIN_DEVICE_DISK) {</DIV>
<DIV>        if (STREQ_NULLABLE(driver, "tap") || STREQ_NULLABLE(driver, "tap2"))</DIV>
<DIV>            strcpy(class, driver);</DIV>
<DIV>        else</DIV>
<DIV>            strcpy(class, "vbd");</DIV></DIV>
<DIV>-----------------------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em">the follow line:</DIV>
<DIV 
style="TEXT-INDENT: 2em">const char *driver = virDomainDiskGetDriver(dev->data.disk);</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">if the dev->data.disk not initialize 
before,  the libvirt will crash.</DIV>
<DIV> </DIV>
<DIV style="TEXT-INDENT: 2em">And I changed it like this :</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV 
style="TEXT-INDENT: 2em">--------------------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em">static int</DIV>
<DIV style="TEXT-INDENT: 2em">
<DIV style="TEXT-INDENT: 2em">
<DIV>virDomainXMLDevID(virConnectPtr conn, virDomainDefPtr def, virDomainDeviceDefPtr dev, char *class,  char *ref, int ref_len)</DIV>
<DIV>{</DIV>
<DIV>    xenUnifiedPrivatePtr priv = conn->privateData;</DIV>
<DIV>    char *xref;</DIV>
<DIV>    char *tmp;</DIV>
<DIV> </DIV>
<DIV>    if (dev->type == VIR_DOMAIN_DEVICE_DISK) {</DIV>
<DIV> </DIV>
<DIV>
<DIV>    
    const char *driver = virDomainDiskGetDriver(dev->data.disk);</DIV>
<DIV> </DIV></DIV>
<DIV>        if (STREQ_NULLABLE(driver, "tap") || STREQ_NULLABLE(driver, "tap2"))</DIV>
<DIV>            strcpy(class, driver);</DIV>
<DIV>        else</DIV>
<DIV>            strcpy(class, "vbd");</DIV></DIV></DIV>
<DIV 
style="TEXT-INDENT: 2em">-------------------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">It works fine</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">Would some confirm and fix it?</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 26em">Xiaolin.Su</DIV></BODY></HTML>