|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 16/19] libxl: suspend: Abolish usleeps in domain suspend wait
Ian Jackson writes ("Re: [PATCH 16/19] libxl: suspend: Abolish usleeps in
domain suspend wait"):
> Reading xenstored_core.c suggests both read and write give EINVAL. So
> making xswait work for it would indeed involve special-casing @ in
> libxl.
I looked at how this would seem in the API and it's very simple. See
below.
I think I should probably add this to my series and use it in the
later patch.
Ian.
From 41abced84e669449a926ca38a78194a2188c7cff Mon Sep 17 00:00:00 2001
From: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Date: Fri, 14 Mar 2014 17:38:38 +0000
Subject: [PATCH] libxl: events: libxl__xswait* support @paths
Special-case paths starting with '@' in libxl__xswait. Attempting to
read these from xenstore gives EINVAL. Callers waiting for (say)
@releaseDomain will be checking for some condition which can be
observed other than by looking at xenstore.
Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
tools/libxl/libxl_aoutils.c | 8 ++++++--
tools/libxl/libxl_internal.h | 2 ++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/tools/libxl/libxl_aoutils.c b/tools/libxl/libxl_aoutils.c
index 477717b..1c9eb9e 100644
--- a/tools/libxl/libxl_aoutils.c
+++ b/tools/libxl/libxl_aoutils.c
@@ -69,8 +69,12 @@ void xswait_xswatch_callback(libxl__egc *egc,
libxl__ev_xswatch *xsw,
int rc;
const char *data;
- rc = libxl__xs_read_checked(gc, XBT_NULL, xswa->path, &data);
- if (rc) { xswait_report_error(egc, xswa, rc); return; }
+ if (xswa->path[0] == '@') {
+ data = 0;
+ } else {
+ rc = libxl__xs_read_checked(gc, XBT_NULL, xswa->path, &data);
+ if (rc) { xswait_report_error(egc, xswa, rc); return; }
+ }
xswa->callback(egc, xswa, 0, data);
}
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 644fcee..dc3d34c 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1110,6 +1110,8 @@ typedef struct libxl__xswait_state libxl__xswait_state;
* This HAS been logged.
* xswait will not continue (but calling libxl__xswait_stop is OK).
*
+ * xswait.path may start with with '@', in which case no read is done
+ * and the callback will always get data==0.
*/
typedef void libxl__xswait_callback(libxl__egc *egc,
libxl__xswait_state *xswa, int rc, const char *data);
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |