From: Daniel P. Berrange Date: Thu, 30 Jun 2011 12:12:56 +0000 (+0100) Subject: Fix leak of virStreamPtr object with callback added in fdstream impl X-Git-Tag: v0.9.3~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f40b80ba86fe5ac3f9d5c0da43038fdf72331e3;p=thirdparty%2Flibvirt.git Fix leak of virStreamPtr object with callback added in fdstream impl When adding a callback to an FD stream, we take an extra reference on the virStreamPtr instance. We forgot to registered a free function with the callback, so when the callback was removed, the extra reference held on virStreamPtr was not released. * src/fdstream.c: Use a free callback to release reference on virStreamPtr when removing callback --- diff --git a/src/fdstream.c b/src/fdstream.c index 182b6fae0e..54f8198aa0 100644 --- a/src/fdstream.c +++ b/src/fdstream.c @@ -171,6 +171,13 @@ static void virFDStreamEvent(int watch ATTRIBUTE_UNUSED, } } +static void virFDStreamCallbackFree(void *opaque) +{ + virStreamPtr st = opaque; + virStreamFree(st); +} + + static int virFDStreamAddCallback(virStreamPtr st, int events, @@ -198,7 +205,7 @@ virFDStreamAddCallback(virStreamPtr st, events, virFDStreamEvent, st, - NULL)) < 0) { + virFDStreamCallbackFree)) < 0) { streamsReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("cannot register file watch on stream")); goto cleanup;