于 2011年09月20日 04:58, Eric Blake 写道:
On 09/01/2011 07:44 AM, Osier Yang wrote:
> Libvirt loads the domain conf from status XML if it's running when
> starting up. The problem is there is no record of the original conf.
> (dom->newDef is NULL here).
>
> So libvirt won't be able to restore the domain conf to original one
> when destroying/shutdown. E.g.
>
> 1) attach a device without "--persistent"
> 2) restart libvirtd
> 3) destroy domain
> 4) start domain
>
> One will see the the disk still exists.
>
> This patch is to fix the peoblem by assigning persistent domain conf
> to dom->newDef if it's NULL and the domain is running.
I was hoping danpb would weigh in on this one, but it looks right to
me, definitely solves the test in your commit message, and is
appropriate for 0.9.5.
ACK.
> +++ b/src/conf/domain_conf.c
> @@ -10533,9 +10533,15 @@ static virDomainObjPtr
> virDomainLoadConfig(virCapsPtr caps,
> if ((dom = virDomainFindByUUID(doms, def->uuid))) {
> dom->autostart = autostart;
>
> + if (virDomainObjIsActive(dom)&&
> + !dom->newDef) {
> + virDomainObjAssignDef(dom, def, false);
> + } else {
> + virDomainDefFree(def);
> + }
> +
> VIR_FREE(configFile);
> VIR_FREE(autostartLink);
> - virDomainDefFree(def);
> return dom;
> }
>
Pushed.
Osier