[libvirt] [PATCHv2 3/3] util: avoid VM object to be disposed before unlock in close callback.
John Ferlan
jferlan at redhat.com
Wed Jan 18 23:36:13 UTC 2017
On 01/10/2017 01:23 AM, Wang King wrote:
> Probably causes 'vm' to be disposed in execute qemuProcessAutoDestroy
> callback function, reference 'vm' avoid unlock disposed object.
>
> Signed-off-by: Wang King <king.wang at huawei.com>
> ---
> src/util/virclosecallbacks.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
I don't see how getting an extra Ref resolves the issue...
Let's see how 2/3 falls out, but I think this one is dropped.
John
> diff --git a/src/util/virclosecallbacks.c b/src/util/virclosecallbacks.c
> index 633b22c..ab11e95 100644
> --- a/src/util/virclosecallbacks.c
> +++ b/src/util/virclosecallbacks.c
> @@ -337,18 +337,20 @@ virCloseCallbacksRun(virCloseCallbacksPtr closeCallbacks,
>
> for (i = 0; i < list->nentries; i++) {
> virDomainObjPtr vm;
> + virDomainObjPtr dom;
>
> - if (!(vm = virDomainObjListFindByUUID(domains,
> - list->entries[i].uuid))) {
> + if (!(vm = virDomainObjListFindByUUIDRef(domains,
> + list->entries[i].uuid))) {
> char uuidstr[VIR_UUID_STRING_BUFLEN];
> virUUIDFormat(list->entries[i].uuid, uuidstr);
> VIR_DEBUG("No domain object with UUID %s", uuidstr);
> continue;
> }
>
> - vm = list->entries[i].callback(vm, conn, opaque);
> - if (vm)
> - virObjectUnlock(vm);
> + dom = list->entries[i].callback(vm, conn, opaque);
> + if (dom)
> + virObjectUnlock(dom);
> + virObjectUnref(vm);
> }
>
> virObjectLock(closeCallbacks);
>
More information about the libvir-list
mailing list