]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: fix leaking libxl events
authorJim Fehlig <jfehlig@suse.com>
Thu, 16 May 2013 15:38:56 +0000 (09:38 -0600)
committerJim Fehlig <jfehlig@suse.com>
Fri, 17 May 2013 08:35:56 +0000 (02:35 -0600)
libxl expects the event handler to free the event passed to it.  From
libxl_event.h:

   event becomes owned by the application and must be freed, either
   by event_occurs or later

src/libxl/libxl_driver.c

index 814856b204578ec9819c9e2661bee5866aa98fac..d268eea42a1668fea820e0c80ab141cc467592dc 100644 (file)
@@ -711,10 +711,10 @@ libxlVmReap(libxlDriverPrivatePtr driver,
 #endif
 
 static void
-libxlEventHandler(void *data ATTRIBUTE_UNUSED,
-                  VIR_LIBXL_EVENT_CONST libxl_event *event)
+libxlEventHandler(void *data, VIR_LIBXL_EVENT_CONST libxl_event *event)
 {
     libxlDriverPrivatePtr driver = libxl_driver;
+    libxlDomainObjPrivatePtr priv = ((virDomainObjPtr)data)->privateData;
     virDomainObjPtr vm = NULL;
     virDomainEventPtr dom_event = NULL;
     libxl_shutdown_reason xl_reason = event->u.domain_shutdown.shutdown_reason;
@@ -771,6 +771,8 @@ cleanup:
         libxlDomainEventQueue(driver, dom_event);
         libxlDriverUnlock(driver);
     }
+    /* Cast away any const */
+    libxl_event_free(priv->ctx, (libxl_event *)event);
 }
 
 static const struct libxl_event_hooks ev_hooks = {