diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2011-06-30 13:12:56 +0100 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2011-06-30 18:04:01 +0100 |
commit | 9f40b80ba86fe5ac3f9d5c0da43038fdf72331e3 (patch) | |
tree | d7fe708ce71c53bdd25059be447e1c651add08b8 | |
parent | Fix leak of mdnsGroupName in virNetServer object (diff) | |
download | libvirt-9f40b80ba86fe5ac3f9d5c0da43038fdf72331e3.tar.gz libvirt-9f40b80ba86fe5ac3f9d5c0da43038fdf72331e3.tar.bz2 libvirt-9f40b80ba86fe5ac3f9d5c0da43038fdf72331e3.zip |
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
-rw-r--r-- | src/fdstream.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/fdstream.c b/src/fdstream.c index 182b6fae0..54f8198aa 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; |