diff mbox

[for-2.8] qom: fix qemu_opts leak when hot unplug object

Message ID 1479901791-144760-1-git-send-email-arei.gonglei@huawei.com (mailing list archive)
State New, archived
Headers show

Commit Message

Gonglei (Arei) Nov. 23, 2016, 11:49 a.m. UTC
If we assign the user crateable object in QEMU command
line, then the correspeonding qemu_opts for the object
doesn't be deleted, which will produce a wrong result.

If we hot unplug the object by object_del, the qemu_opts
will be leaked, ann then if we hot plug the object using
the same id by object_add, we will get a error:
 "Duplicate ID 'xxxx' for object"

Let's del the qemu opts after the object created, just
likes what the hmp_object_add function does.

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
---
 qom/object_interfaces.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Gonglei (Arei) Jan. 9, 2017, 2:05 a.m. UTC | #1
Ping...

Anybody can pick it up? Thanks!

Regards,
-Gonglei


> -----Original Message-----
> From: Gonglei (Arei)
> Sent: Wednesday, November 23, 2016 7:50 PM
> To: qemu-devel@nongnu.org
> Cc: afaerber@suse.de; Gonglei (Arei)
> Subject: [PATCH for-2.8] qom: fix qemu_opts leak when hot unplug object
> 
> If we assign the user crateable object in QEMU command
> line, then the correspeonding qemu_opts for the object
> doesn't be deleted, which will produce a wrong result.
> 
> If we hot unplug the object by object_del, the qemu_opts
> will be leaked, ann then if we hot plug the object using
> the same id by object_add, we will get a error:
>  "Duplicate ID 'xxxx' for object"
> 
> Let's del the qemu opts after the object created, just
> likes what the hmp_object_add function does.
> 
> Signed-off-by: Gonglei <arei.gonglei@huawei.com>
> ---
>  qom/object_interfaces.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
> index ded4d84..b8fe9db 100644
> --- a/qom/object_interfaces.c
> +++ b/qom/object_interfaces.c
> @@ -189,6 +189,10 @@ int user_creatable_add_opts_foreach(void *opaque,
> QemuOpts *opts, Error **errp)
>          return -1;
>      }
>      object_unref(obj);
> +
> +    qemu_opts_del(opts);
> +    opts = NULL;
> +
>      return 0;
>  }
> 
> --
> 1.8.3.1
>
diff mbox

Patch

diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index ded4d84..b8fe9db 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -189,6 +189,10 @@  int user_creatable_add_opts_foreach(void *opaque, QemuOpts *opts, Error **errp)
         return -1;
     }
     object_unref(obj);
+
+    qemu_opts_del(opts);
+    opts = NULL;
+
     return 0;
 }