aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-10-26 16:49:45 +0100
committerIan Campbell <ian.campbell@citrix.com>2012-10-26 16:49:45 +0100
commit75985fb641dd06b5d18cb16ba24d571606f54950 (patch)
tree65a2d198b446af947abe46c3d3ac23a00acef934
parent0f8bec6473523a93889aa080d4f4fb5460616478 (diff)
downloadxen-75985fb641dd06b5d18cb16ba24d571606f54950.tar.gz
xen-75985fb641dd06b5d18cb16ba24d571606f54950.tar.bz2
xen-75985fb641dd06b5d18cb16ba24d571606f54950.zip
libxl: propagate user supplied values into event for_user field.
This was ommited in the majority of cases. Add as a parameter to libxl__event_new and the NEW_EVENT wrapper to help prevent it being forgotten in the future. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Campbell <ian.campbell@citrix.com> xen-unstable changeset: 26089:fb5cf014b387 Backport-requested-by: Ian Campbell <Ian.Campbell@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/libxl.c9
-rw-r--r--tools/libxl/libxl_create.c3
-rw-r--r--tools/libxl/libxl_event.c8
-rw-r--r--tools/libxl/libxl_internal.h7
4 files changed, 15 insertions, 12 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index bc2f1eadf5..64e4c079ec 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -972,7 +972,7 @@ static void domain_death_occurred(libxl__egc *egc,
libxl_evgen_domain_death *evg_next = LIBXL_TAILQ_NEXT(evg, entry);
*evg_upd = evg_next;
- libxl_event *ev = NEW_EVENT(egc, DOMAIN_DEATH, evg->domid);
+ libxl_event *ev = NEW_EVENT(egc, DOMAIN_DEATH, evg->domid, evg->user);
libxl__event_occurred(egc, ev);
@@ -1058,8 +1058,9 @@ static void domain_death_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w,
if (!evg->shutdown_reported &&
(got->flags & XEN_DOMINF_shutdown)) {
- libxl_event *ev = NEW_EVENT(egc, DOMAIN_SHUTDOWN, got->domain);
-
+ libxl_event *ev = NEW_EVENT(egc, DOMAIN_SHUTDOWN,
+ got->domain, evg->user);
+
LIBXL__LOG(CTX, LIBXL__LOG_DEBUG, " shutdown reporting");
ev->u.domain_shutdown.shutdown_reason =
@@ -1158,7 +1159,7 @@ static void disk_eject_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w,
return;
}
- libxl_event *ev = NEW_EVENT(egc, DISK_EJECT, evg->domid);
+ libxl_event *ev = NEW_EVENT(egc, DISK_EJECT, evg->domid, evg->user);
libxl_device_disk *disk = &ev->u.disk_eject.disk;
backend = libxl__xs_read(gc, XBT_NULL,
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index ef17f052c0..89f4e0a58b 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -705,7 +705,8 @@ static void domcreate_console_available(libxl__egc *egc,
libxl__domain_create_state *dcs) {
libxl__ao_progress_report(egc, dcs->ao, &dcs->aop_console_how,
NEW_EVENT(egc, DOMAIN_CREATE_CONSOLE_AVAILABLE,
- dcs->guest_domid));
+ dcs->guest_domid,
+ dcs->aop_console_how.for_event));
}
static void domcreate_bootloader_done(libxl__egc *egc,
diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c
index 939906c03c..128b6a4760 100644
--- a/tools/libxl/libxl_event.c
+++ b/tools/libxl/libxl_event.c
@@ -1157,7 +1157,8 @@ void libxl_event_free(libxl_ctx *ctx, libxl_event *event)
}
libxl_event *libxl__event_new(libxl__egc *egc,
- libxl_event_type type, uint32_t domid)
+ libxl_event_type type, uint32_t domid,
+ libxl_ev_user for_user)
{
EGC_GC;
libxl_event *ev;
@@ -1168,6 +1169,7 @@ libxl_event *libxl__event_new(libxl__egc *egc,
libxl_event_init_type(ev, type);
ev->domid = domid;
+ ev->for_user = for_user;
return ev;
}
@@ -1528,9 +1530,8 @@ void libxl__ao_complete_check_progress_reports(libxl__egc *egc, libxl__ao *ao)
LIBXL_TAILQ_INSERT_TAIL(&egc->aos_for_callback, ao, entry_for_callback);
} else {
libxl_event *ev;
- ev = NEW_EVENT(egc, OPERATION_COMPLETE, ao->domid);
+ ev = NEW_EVENT(egc, OPERATION_COMPLETE, ao->domid, ao->how.u.for_event);
if (ev) {
- ev->for_user = ao->how.u.for_event;
ev->u.operation_complete.rc = ao->rc;
libxl__event_occurred(egc, ev);
}
@@ -1662,7 +1663,6 @@ void libxl__ao_progress_report(libxl__egc *egc, libxl__ao *ao,
const libxl_asyncprogress_how *how, libxl_event *ev)
{
AO_GC;
- ev->for_user = how->for_event;
if (how->callback == dummy_asyncprogress_callback_ignore) {
LOG(DEBUG,"ao %p: progress report: ignored",ao);
libxl_event_free(CTX,ev);
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 5e5a131e67..a135cd792e 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -778,13 +778,14 @@ _hidden void libxl__event_occurred(libxl__egc*, libxl_event *event);
* event should be suitable for passing to libxl_event_free. */
_hidden libxl_event *libxl__event_new(libxl__egc*, libxl_event_type,
- uint32_t domid);
+ uint32_t domid,
+ libxl_ev_user for_user);
/* Convenience function.
* Allocates a new libxl_event, fills in domid and type.
* Cannot fail. */
-#define NEW_EVENT(egc, type, domid) \
- libxl__event_new((egc), LIBXL_EVENT_TYPE_##type, (domid))
+#define NEW_EVENT(egc, type, domid, user) \
+ libxl__event_new((egc), LIBXL_EVENT_TYPE_##type, (domid), (user))
/* Convenience macro. */
/*