[libvirt] [PATCH 03/20] libxl: Properly cleanup after libxlDomObjFromDomain
Jim Fehlig
jfehlig at suse.com
Fri Mar 16 20:31:46 UTC 2018
On 03/11/2018 08:13 PM, Jim Fehlig wrote:
> On 03/09/2018 09:47 AM, John Ferlan wrote:
>> Commit id '9ac945078' altered libxlDomObjFromDomain to return
>> a locked *and* ref counted object for some specific purposes;
>> however, it neglected to alter all the consumers of the helper
>> to use virDomainObjEndAPI thus leaving many objects with extra
>> ref counts.
>>
>> The two consumers for libxlDomainMigrationConfirm would also
>> originally use the libxlDomObjFromDomain API (either from
>> libxlDomainMigrateConfirm3Params or libxlDoMigrateP2P via
>> libxlDomainMigrationPerformP2P and libxlDomainMigratePerform3Params.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>> src/libxl/libxl_driver.c | 86 ++++++++++++++++-----------------------------
>> src/libxl/libxl_migration.c | 3 +-
>> 2 files changed, 31 insertions(+), 58 deletions(-)
>>
>> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
>> index b5101626e..9aa4a293c 100644
>> --- a/src/libxl/libxl_driver.c
>> +++ b/src/libxl/libxl_driver.c
>> @@ -1322,8 +1322,7 @@ libxlDomainShutdownFlags(virDomainPtr dom, unsigned int
>> flags)
>> }
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -1373,8 +1372,7 @@ libxlDomainReboot(virDomainPtr dom, unsigned int flags)
>> }
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -1459,8 +1457,7 @@ libxlDomainGetOSType(virDomainPtr dom)
>> goto cleanup;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return type;
>> }
>> @@ -1479,8 +1476,7 @@ libxlDomainGetMaxMemory(virDomainPtr dom)
>> ret = virDomainDefGetMemoryTotal(vm->def);
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -1658,8 +1654,7 @@ libxlDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info)
>> ret = 0;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -1685,8 +1680,7 @@ libxlDomainGetState(virDomainPtr dom,
>> ret = 0;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -2110,8 +2104,7 @@ libxlDomainHasManagedSaveImage(virDomainPtr dom,
>> unsigned int flags)
>> ret = vm->hasManagedSave;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -2140,8 +2133,7 @@ libxlDomainManagedSaveRemove(virDomainPtr dom, unsigned
>> int flags)
>> cleanup:
>> VIR_FREE(name);
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -2352,8 +2344,7 @@ libxlDomainGetVcpusFlags(virDomainPtr dom, unsigned int
>> flags)
>> ret = virDomainDefGetVcpus(def);
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -2484,8 +2475,7 @@ libxlDomainGetVcpuPinInfo(virDomainPtr dom, int ncpumaps,
>> libxl_get_max_cpus(cfg->ctx), NULL);
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -2548,8 +2538,7 @@ libxlDomainGetVcpus(virDomainPtr dom, virVcpuInfoPtr
>> info, int maxinfo,
>> ret = maxinfo;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -2580,8 +2569,7 @@ libxlDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
>> virDomainDefFormatConvertXMLFlags(flags));
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -2901,8 +2889,7 @@ libxlDomainUndefineFlags(virDomainPtr dom,
>> cleanup:
>> VIR_FREE(name);
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> if (event)
>> libxlDomainEventQueue(driver, event);
>> virObjectUnref(cfg);
>> @@ -4261,8 +4248,7 @@ libxlDomainUpdateDeviceFlags(virDomainPtr dom, const
>> char *xml,
>> cleanup:
>> virDomainDefFree(vmdef);
>> virDomainDeviceDefFree(dev);
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -4394,8 +4380,7 @@ libxlDomainGetAutostart(virDomainPtr dom, int *autostart)
>> ret = 0;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -4521,8 +4506,7 @@ libxlDomainGetSchedulerType(virDomainPtr dom, int *nparams)
>> ignore_value(VIR_STRDUP(ret, name));
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -4587,8 +4571,7 @@ libxlDomainGetSchedulerParametersFlags(virDomainPtr dom,
>> ret = 0;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -4750,8 +4733,7 @@ libxlDomainOpenConsole(virDomainPtr dom,
>> }
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -4886,8 +4868,7 @@ libxlDomainGetNumaParameters(virDomainPtr dom,
>> VIR_FREE(nodeset);
>> virBitmapFree(nodes);
>> libxl_bitmap_dispose(&nodemap);
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> virObjectUnref(cfg);
>> return ret;
>> }
>> @@ -4908,8 +4889,7 @@ libxlDomainIsActive(virDomainPtr dom)
>> ret = virDomainObjIsActive(obj);
>> cleanup:
>> - if (obj)
>> - virObjectUnlock(obj);
>> + virDomainObjEndAPI(&obj);
>> return ret;
>> }
>> @@ -4928,8 +4908,7 @@ libxlDomainIsPersistent(virDomainPtr dom)
>> ret = obj->persistent;
>> cleanup:
>> - if (obj)
>> - virObjectUnlock(obj);
>> + virDomainObjEndAPI(&obj);
>> return ret;
>> }
>> @@ -4948,8 +4927,7 @@ libxlDomainIsUpdated(virDomainPtr dom)
>> ret = vm->updated;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -5107,8 +5085,7 @@ libxlDomainGetCPUStats(virDomainPtr dom,
>> start_cpu, ncpus);
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -5211,8 +5188,7 @@ libxlDomainGetJobInfo(virDomainPtr dom,
>> ret = 0;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>> @@ -5263,8 +5239,7 @@ libxlDomainGetJobStats(virDomainPtr dom,
>> ret = 0;
>> cleanup:
>> - if (vm)
>> - virObjectUnlock(vm);
>> + virDomainObjEndAPI(&vm);
>> return ret;
>> }
>
> For these changes
>
> Reviewed-by: Jim Fehlig <jfehlig at suse.com>
I've pushed this part of the patch. Your fixes have encouraged me to audit all
the begin/end API code in the libxl driver and I'd like to base any fixes on top
of items we've already hashed out.
Regards,
Jim
More information about the libvir-list
mailing list