[libvirt] PATCH: Fix redetection of transient QEMU VMs on daemon restarts

Daniel Veillard veillard at redhat.com
Thu Jun 4 11:43:31 UTC 2009


On Wed, Jun 03, 2009 at 05:42:20PM +0100, Daniel P. Berrange wrote:
> On Tue, Jun 02, 2009 at 03:55:27PM +0200, Daniel Veillard wrote:
> > On Wed, May 27, 2009 at 04:58:44PM +0100, Daniel P. Berrange wrote:
> > [...]
> > > +                                            xmlXPathContextPtr ctxt)
> > > +{
> > > +    char *tmp = NULL;
> > > +    long val;
> > > +    xmlNodePtr config;
> > > +    xmlNodePtr oldctxt;
> > 
> >   I would s/oldctxt/oldnode/ as what is saved is really only the old
> >   XPath current node not the context itself.
> 
> Good idea, changed this.
> 
> > 
> > [...]
> > > +char *virDomainObjFormat(virConnectPtr conn,
> > > +                         virDomainObjPtr obj,
> > > +                         int flags)
> > > +{
> > > +    char *config_xml = NULL, *xml = NULL;
> > > +    virBuffer buf = VIR_BUFFER_INITIALIZER;
> > > +
> > > +    virBufferVSprintf(&buf, "<domstatus state='%s' pid='%d'>\n",
> > > +                      virDomainStateTypeToString(obj->state),
> > > +                      obj->pid);
> > > +    virBufferEscapeString(&buf, "  <monitor path='%s'/>\n", obj->monitorpath);
> > > +
> > > +    if (!(config_xml = virDomainDefFormat(conn,
> > > +                                          obj->def,
> > > +                                          flags)))
> > 
> >            Hum we are leaking the buffer content here.
> > 
> > > +        goto cleanup;
> > > +
> > > +    virBufferAdd(&buf, config_xml, strlen(config_xml));
> > > +    virBufferAddLit(&buf, "</domstatus>\n");
> > > +
> > > +    xml = virBufferContentAndReset(&buf);
> > > +cleanup:
> > > +    VIR_FREE(config_xml);
> > > +    return xml;
> > > +
> > > +}
> 
> 
> Yes, and also forgetting to check virBufferError() to report OOM. Fixed
> the cleanup in this function now.
> 
> 
> > > +        virDomainObjUnlock(obj);
> > > +        virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
> > > +                             _("unexpected domain %s already exists"), obj->def->name);
> > 
> > 
> >   let's wrap to 80 columns
> > 
> > [...]
> > > +/*
> > > + * Open an existing VM's monitor, and re-detect VCPUs
> > > + * threads
> > 
> >   maybe update the comment about the security labels too, especially as
> > this is a bit arcane.
> 
> Updated these two.
> 
> > > @@ -1519,10 +1519,8 @@ cleanup:
> > >          vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
> > >          vm->def->graphics[0]->data.vnc.autoport)
> > >          vm->def->graphics[0]->data.vnc.port = -1;
> > > -    if (vm->logfile != -1) {
> > > -        close(vm->logfile);
> > > -        vm->logfile = -1;
> > > -    }
> > > +    if (logfile != -1)
> > > +        close(logfile);
> > >      vm->def->id = -1;
> > >      return -1;
> > >  }
> > 
> >    Hum, do we still use vm->logfile field then ? Maybe I didn't see the
> > place where it was removed from the structure.
> 
> Yep, this field in the struct has been killed off - see domain_conf.h
> 
> Here's the updated patch in full

  ACK, in case you didn't commit it yet !

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list