Am 25.09.2013 um 02:28 hat Michael Roth geschrieben:
> Quoting Stefan Hajnoczi (2013-08-14 07:13:52)
> > When there are no snapshots qemu_rbd_snap_list() returns 0 and the
> > snapshot table pointer is NULL.  Don't forget to free the snaps buffer
> > we allocated for librbd rbd_snap_list().
> > 
> > Cc: qemu-sta...@nongnu.org
> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com>
> 
> Ping for 1.6.1

Applied it to the block branch for now, but...

> > ---
> >  block/rbd.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/block/rbd.c b/block/rbd.c
> > index cb71751..4e26fea 100644
> > --- a/block/rbd.c
> > +++ b/block/rbd.c
> > @@ -934,7 +934,7 @@ static int qemu_rbd_snap_list(BlockDriverState *bs,
> >      do {
> >          snaps = g_malloc(sizeof(*snaps) * max_snaps);
> >          snap_count = rbd_snap_list(s->image, snaps, &max_snaps);
> > -        if (snap_count < 0) {
> > +        if (snap_count <= 0) {
> >              g_free(snaps);
> >          }
> >      } while (snap_count == -ERANGE);

...I think this isn't a complete fix. In the successful case we still
leak snaps. The g_free() should probably be moved to after the done:
label in a v2 of the patch.

Kevin

Reply via email to