
On Wed, Nov 10, 2010 at 01:21:24AM +0800, Guangya Liu wrote:
Thanks Daniel for the info.
But I still have a question, since we already make the call qemudDomainCreate synced, why do we need to introduce a bitmap to resolve the problem of getting VNC port conflict error? If qemudDomainCreate is synced, then there should not any problem with VNC port.
Previously, libvirt would call bind() on port numbers until it found one free, then close() the socket & launch QEMU telling it to open that port again. Thus there is a race between libvirt finding a free port with bind()+close() for the first VM, and QEMU actually opening it, where libvirt could then start looking for another port for a second VM. The libvirt driver lock doesn't solve that, because the code involves a separate QEMU process with is outside the context of the lock With the bitmap code, libvirt now records that it assigned this port number to a VM, so when libvirt goes to start a second VM it won't reuse this port, even if the first QEMU hasn't yet got around to opening it. Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|