Hello,
I’m facing some strange behavior, and I hope you can
provide a clarification.
Consider the following code:
virDomainPtr
dom = virDomainLookupByName(virt, domain_name);
if
(dom) {
printf("domain
already defined...\n");
if
(virDomainUndefine(dom))
printf("...unable
to undefine!!!\n");
else
{
printf("...undefined.");
free(dom);
}
}
dom
= virDomainDefineXML(virt, SOME_XML);
if
(dom != NULL) {
const
char *name = virDomainGetName(dom);
printf("NAME
IS NOW: %s\n", name);
}
else
printf("dom
is NULL!\n");
When executed the first time, the code correctly defines the
domain, and prints:
defining
domain test2-vm
libvir:
QEMU error : Domain not found: no domain with matching name 'test2-vm'
NAME
IS NOW: test2-vm
If executed a second time with the same SOME_XML when
the domain is already defined, it prints:
defining
domain test2-vm
domain
already defined...
libvir:
Domain error : invalid domain pointer in virDomainGetName
undefining......undefined.NAME
IS NOW: (null)
Not only the name is null, but the domain can’t be
started. What is the correct way to undefined programmatically a domain that is
already defined? Why is the second virDomainDefineXML() returining a pointer
(as opposed to null), but the pointed object seem to be invalid?
Thanks,
Roberto