]> xenbits.xensource.com Git - libvirt.git/commitdiff
libxl: move event registration to driver initialization
authorJim Fehlig <jfehlig@suse.com>
Thu, 12 Feb 2015 18:37:46 +0000 (11:37 -0700)
committerJim Fehlig <jfehlig@suse.com>
Tue, 24 Mar 2015 21:03:54 +0000 (15:03 -0600)
Register a domain event handler with the driver-wide libxl_ctx
during driver initialization.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
src/libxl/libxl_domain.c
src/libxl/libxl_domain.h
src/libxl/libxl_driver.c

index a78c19193c8f5c02f62fd3186f81f8312d9dd45b..ac70ee2467187b2172e7c04985b7a6c82b9e47de 100644 (file)
@@ -470,19 +470,9 @@ libxlDomainShutdownThread(void *opaque)
 
 /*
  * Handle previously registered domain event notification from libxenlight.
- *
- * Note: Xen 4.3 removed the const from the event handler signature.
- * Detect which signature to use based on
- * LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG.
  */
-#ifdef LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG
-# define VIR_LIBXL_EVENT_CONST /* empty */
-#else
-# define VIR_LIBXL_EVENT_CONST const
-#endif
-
-static void
-libxlEventHandler(void *data, VIR_LIBXL_EVENT_CONST libxl_event *event)
+void
+libxlDomainEventHandler(void *data, VIR_LIBXL_EVENT_CONST libxl_event *event)
 {
     virDomainObjPtr vm = data;
     libxlDomainObjPrivatePtr priv = vm->privateData;
@@ -530,12 +520,6 @@ libxlEventHandler(void *data, VIR_LIBXL_EVENT_CONST libxl_event *event)
     libxl_event_free(priv->ctx, (libxl_event *)event);
 }
 
-const struct libxl_event_hooks ev_hooks = {
-    .event_occurs_mask = LIBXL_EVENTMASK_ALL,
-    .event_occurs = libxlEventHandler,
-    .disaster = NULL,
-};
-
 int
 libxlDomainObjPrivateInitCtx(virDomainObjPtr vm)
 {
@@ -769,7 +753,6 @@ libxlDomainEventsRegister(libxlDriverPrivatePtr driver, virDomainObjPtr vm)
     libxlDomainObjPrivatePtr priv = vm->privateData;
 
     priv->driver = driver;
-    libxl_event_register_callbacks(priv->ctx, &ev_hooks, vm);
 
     /* Always enable domain death events */
     if (libxl_evenable_domain_death(priv->ctx, vm->def->id, 0, &priv->deathW))
index f459fdfa7b06e9504e8d4931a71aeedfac9b3125..96e238e19823c6cb248b789cb586b4c61ac0bcce 100644 (file)
@@ -118,6 +118,21 @@ bool
 libxlDomainCleanupJob(libxlDriverPrivatePtr driver,
                       virDomainObjPtr vm,
                       virDomainShutoffReason reason);
+/*
+ * Note: Xen 4.3 removed the const from the event handler signature.
+ * Detect which signature to use based on
+ * LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG.
+ */
+# ifdef LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG
+#  define VIR_LIBXL_EVENT_CONST /* empty */
+# else
+#  define VIR_LIBXL_EVENT_CONST const
+# endif
+
+void
+libxlDomainEventHandler(void *data,
+                        VIR_LIBXL_EVENT_CONST libxl_event *event);
+
 int
 libxlDomainEventsRegister(libxlDriverPrivatePtr driver,
                           virDomainObjPtr vm);
index dd0f253fb871c91b46357786ea583b20586e2d44..97518601de01022e13976af9769cf420e86c1d89 100644 (file)
@@ -481,6 +481,12 @@ static const libxl_childproc_hooks libxl_child_hooks = {
 #endif
 };
 
+const struct libxl_event_hooks ev_hooks = {
+    .event_occurs_mask = LIBXL_EVENTMASK_ALL,
+    .event_occurs = libxlDomainEventHandler,
+    .disaster = NULL,
+};
+
 static int
 libxlStateInitialize(bool privileged,
                      virStateInhibitCallback callback ATTRIBUTE_UNUSED,
@@ -532,6 +538,9 @@ libxlStateInitialize(bool privileged,
     /* Setup child process handling.  See $xen-src/tools/libxl/libxl_event.h */
     libxl_childproc_setmode(cfg->ctx, &libxl_child_hooks, cfg->ctx);
 
+    /* Register callback to handle domain events */
+    libxl_event_register_callbacks(cfg->ctx, &ev_hooks, libxl_driver);
+
     libxl_driver->config = cfg;
     if (virFileMakePath(cfg->stateDir) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,