[libvirt] [PATCH 6/6] libxl: Find domain object in event handler

Jim Fehlig jfehlig at suse.com
Mon Jan 21 19:22:24 UTC 2013


Since libxl provides the domain ID in the event handler callback,
find the domain object based on the ID.  This approach prevents
processing the callback on a domain that has already been reaped.
---
 src/libxl/libxl_driver.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 7484b83..e28b641 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -656,22 +656,22 @@ libxlVmReap(libxlDriverPrivatePtr driver,
  * Handle previously registered event notification from libxenlight
  */
 static void
-libxlEventHandler(void *data, const libxl_event *event)
+libxlEventHandler(void *data ATTRIBUTE_UNUSED, const libxl_event *event)
 {
     libxlDriverPrivatePtr driver = libxl_driver;
-    virDomainObjPtr vm = data;
+    virDomainObjPtr vm = NULL;
     virDomainEventPtr dom_event = NULL;
 
     libxlDriverLock(driver);
-    virObjectLock(vm);
+    vm = virDomainFindByID(&driver->domains, event->domid);
     libxlDriverUnlock(driver);
 
+    if (!vm)
+        goto cleanup;
+
     if (event->type == LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN) {
         virDomainShutoffReason reason;
 
-        if (event->domid != vm->def->id)
-            goto cleanup;
-
         switch (event->u.domain_shutdown.shutdown_reason) {
             case LIBXL_SHUTDOWN_REASON_POWEROFF:
             case LIBXL_SHUTDOWN_REASON_CRASH:
-- 
1.8.0.1




More information about the libvir-list mailing list