From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46775) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XwQGR-0001KB-3l for qemu-devel@nongnu.org; Thu, 04 Dec 2014 01:51:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XwQGK-0007Sa-Ii for qemu-devel@nongnu.org; Thu, 04 Dec 2014 01:51:47 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39966) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XwQGK-0007SH-BT for qemu-devel@nongnu.org; Thu, 04 Dec 2014 01:51:40 -0500 Date: Thu, 4 Dec 2014 14:51:44 +0800 From: Amos Kong Message-ID: <20141204065144.GC10914@air.redhat.com> References: <1417674851-6248-1-git-send-email-arei.gonglei@huawei.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="/Uq4LBwYP4y1W6pO" Content-Disposition: inline In-Reply-To: <1417674851-6248-1-git-send-email-arei.gonglei@huawei.com> Subject: Re: [Qemu-devel] [PATCH] block/rbd: fix memory leak List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: arei.gonglei@huawei.com Cc: kwolf@redhat.com, josh.durgin@inktank.com, qemu-devel@nongnu.org, stefanha@redhat.com, Markus Armbruster --/Uq4LBwYP4y1W6pO Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Dec 04, 2014 at 02:34:11PM +0800, arei.gonglei@huawei.com wrote: > From: Gonglei >=20 > Variable local_err going out of scope > leaks the storage it points to. >=20 > Cc: Markus Armbruster > Signed-off-by: Gonglei > --- > block/rbd.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) >=20 > diff --git a/block/rbd.c b/block/rbd.c > index 5b5a64a..f3ab2dd 100644 > --- a/block/rbd.c > +++ b/block/rbd.c > @@ -459,7 +459,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict = *options, int flags, > clientname =3D qemu_rbd_parse_clientname(conf, clientname_buf); > r =3D rados_create(&s->cluster, clientname); > if (r < 0) { > - error_setg(&local_err, "error initializing"); > + error_setg(errp, "error initializing"); > goto failed_opts; > } > =20 > @@ -495,19 +495,19 @@ static int qemu_rbd_open(BlockDriverState *bs, QDic= t *options, int flags, > =20 > r =3D rados_connect(s->cluster); > if (r < 0) { > - error_setg(&local_err, "error connecting"); > + error_setg(errp, "error connecting"); > goto failed_shutdown; > } > =20 > r =3D rados_ioctx_create(s->cluster, pool, &s->io_ctx); > if (r < 0) { > - error_setg(&local_err, "error opening pool %s", pool); > + error_setg(errp, "error opening pool %s", pool); > goto failed_shutdown; > } > =20 > r =3D rbd_open(s->io_ctx, s->name, &s->image, s->snap); > if (r < 0) { > - error_setg(&local_err, "error reading header from %s", s->name); > + error_setg(errp, "error reading header from %s", s->name); > goto failed_open; > } 'local_err' was defined for collecting error insider qemu_opts_absorb_qdict= (). We should set error to 'errp', then the error can be passed to caller, and free the memory in future. Reviewed-by: Amos Kong --=20 Amos. --/Uq4LBwYP4y1W6pO Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJUgASAAAoJELxSv6I5vP9jE/MQALuOtBvh+TOPtPvzzicq2Tk+ aIY4j0+eeVmt9UaAcHmANxRRF6wfLJPTSUictc8wUjaXJh7Lf7U4KI58EHf9bouO Q/SEjNUYIQPouHmYBwmO1ycEuytyhoDkkp0aRlJ8j/8NTa9Ac/UjdOfrSKy9k4r1 LRjmI47C+SUC+BvvPspQczJwSMUqw0nh5i4xJgQOEN3nk5+7ULurs9TDZ4DNMqsT neWvP48KRLyAsop+/oo+4nPjvsrpmRFcT/stR8ezI5Lb7XG8dzWHV5c7nBwAVY3/ OxeMj5IympMqoCn/+YHOlSwmmUHHWuVBVkJFaWQL0XYvaLxlhSVZpGiZGN/MRtdT k+he3OZ5xB2ZmLQIcrwg4beHJgqmBDz9p7tufFwKtixfuMU7T+SYN3CYuExaH9kW YMRDvD6n8gsMWuWQ4JO2dztEi5QSxCdSi97hdgOEOK4QojO7jtNKed/t+O7eV840 3Qp9BlDsVfAG7nIdbIPTAlqxzn47TuJjoCsblvzhkdYv45terhcr0PQXTDweVkP4 FFOcekPLu4W8RC3OFPG0Q2ahkdX2E077cgEMZiQMAwf2d8ShM6DmITePv7zyosAZ wDWOh/5FpRHqS6HnuCzqyZ3lUMOFReU9BZhgHtF5Xyt1dWhKdYAgZHY4WeUZQnBi 4zMLY/yxuuVqbIzGo4Rv =OO4N -----END PGP SIGNATURE----- --/Uq4LBwYP4y1W6pO--