]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix leak of virStreamPtr object with callback added in fdstream impl
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 30 Jun 2011 12:12:56 +0000 (13:12 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 30 Jun 2011 17:04:01 +0000 (18:04 +0100)
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

src/fdstream.c

index 182b6fae0ea16f71f8a280cddebe46ecffbf405d..54f8198aa0c34d590d8ecbdb4c1ec6db271daad1 100644 (file)
@@ -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;