Destroy is neither synchronous nor guaranteed. It's a request to the hypervisor that isn't completed until all of the memory is completely unmapped by any other domain that may be mapping it. If you want to be really robust, you shouldn't assume that the domain is actually destroyed after doing a destroy. The race conditions, in practice, are usually very small but they are still there. Regards, Anthony Liguori On Tue, 26 Sep 2006 18:07:06 -0400, Lon Hohberger wrote: > i686 > > libvirt-0.1.5-3 > xen-3.0.2-33 > > Code: > > domain_desc = virDomainGetXMLDesc(vdp, 0); response = > virDomainDestroy(vdp); > if (response == 0 && domain_desc) { > /* sleep(3); */ > virDomainCreateLinux(vp, domain_desc, 0); > free(domain_desc); > } > } > If I add the 'sleep()', the domain dies and virDomainCreateLinux() fails > with the following error: > > libvir: Xen Daemon error : POST operation failed: No such domain > futon1 > Failed to get devices for domain futon1 > > That really doesn't bother me, and it's likely my fault anyway (it's not a > fully configured domain; it's a dom-U sitting in the anaconda install > screen). Of course, it's moot if we get a guaranteed synchronous reboot > flag for virDomainReboot()... hint hint ;) > > What bothers me is that if I *don't* put the sleep in, the domain never > actually gets destroyed. In this particular case, the domain is still > sitting at the anaconda install screen; all I have to do is reconnect > using xm console. > > If I only do a virDomainDestroy(), the domain gets destroyed. So, it > looks like like the virDomainCreateLinux() cancels the destroy request > before it can be completed. > > This makes it look like that the destroy request is not synchronous, > and/or the result of the operation is not guaranteed (only that the > request was made). Is it supposed to work this way, or is this a > bug/problem? > > -- Lon