diff --git a/tools/libxl/libxl_aoutils.c b/tools/libxl/libxl_aoutils.c index 477717bae7..1c9eb9e7c0 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 a208be720e..a82a43d920 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1130,6 +1130,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);