[Qemu-devel] [PATCH] virtio-scsi-dataplane: fix memory leak for VirtIOSCSIVring

2015-03-26 Thread Ting Wang
VirtIOSCSIVring which allocated in virtio_scsi_vring_init
should be free when dataplane has been stopped or failed to start.

Signed-off-by: Ting Wang 
---
 hw/scsi/virtio-scsi-dataplane.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c
index c069cd7..5575648 100644
--- a/hw/scsi/virtio-scsi-dataplane.c
+++ b/hw/scsi/virtio-scsi-dataplane.c
@@ -182,13 +182,19 @@ static void virtio_scsi_vring_teardown(VirtIOSCSI *s)
 
 if (s->ctrl_vring) {
 vring_teardown(&s->ctrl_vring->vring, vdev, 0);
+g_slice_free(VirtIOSCSIVring, s->ctrl_vring);
+s->ctrl_vring = NULL;
 }
 if (s->event_vring) {
 vring_teardown(&s->event_vring->vring, vdev, 1);
+g_slice_free(VirtIOSCSIVring, s->event_vring);
+s->event_vring = NULL;
 }
 if (s->cmd_vrings) {
 for (i = 0; i < vs->conf.num_queues && s->cmd_vrings[i]; i++) {
 vring_teardown(&s->cmd_vrings[i]->vring, vdev, 2 + i);
+g_slice_free(VirtIOSCSIVring, s->cmd_vrings[i]);
+s->cmd_vrings[i] = NULL;
 }
 free(s->cmd_vrings);
 s->cmd_vrings = NULL;
-- 
1.8.5





Re: [Qemu-devel] [PATCH] virtio-scsi-dataplane: fix memory leak for VirtIOSCSIVring

2015-03-26 Thread Paolo Bonzini


On 26/03/2015 08:42, Ting Wang wrote:
> VirtIOSCSIVring which allocated in virtio_scsi_vring_init
> should be free when dataplane has been stopped or failed to start.
> 
> Signed-off-by: Ting Wang 
> ---
>  hw/scsi/virtio-scsi-dataplane.c | 6 ++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c
> index c069cd7..5575648 100644
> --- a/hw/scsi/virtio-scsi-dataplane.c
> +++ b/hw/scsi/virtio-scsi-dataplane.c
> @@ -182,13 +182,19 @@ static void virtio_scsi_vring_teardown(VirtIOSCSI *s)
>  
>  if (s->ctrl_vring) {
>  vring_teardown(&s->ctrl_vring->vring, vdev, 0);
> +g_slice_free(VirtIOSCSIVring, s->ctrl_vring);
> +s->ctrl_vring = NULL;
>  }
>  if (s->event_vring) {
>  vring_teardown(&s->event_vring->vring, vdev, 1);
> +g_slice_free(VirtIOSCSIVring, s->event_vring);
> +s->event_vring = NULL;
>  }
>  if (s->cmd_vrings) {
>  for (i = 0; i < vs->conf.num_queues && s->cmd_vrings[i]; i++) {
>  vring_teardown(&s->cmd_vrings[i]->vring, vdev, 2 + i);
> +g_slice_free(VirtIOSCSIVring, s->cmd_vrings[i]);
> +s->cmd_vrings[i] = NULL;
>  }
>  free(s->cmd_vrings);
>  s->cmd_vrings = NULL;
> 

Applied for 2.3.0-rc2, thanks.

Paolo