[Qemu-devel] [PATCH] virtio-scsi-dataplane: fix memory leak for VirtIOSCSIVring
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
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