[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 24/29] tools/libxl: Allow suppression of POLLHUP for datacopiers
If the far end of a pipe has been closed, poll() will set POLLHUP. When reading from a pipe, POLLIN|POLLHUP is a valid state, even when there is still data to be read. Currently, datacopier will bail because of POLLHUP before discovering that there is valid data to be read. Add an option to ignore POLLHUP for consumers who would prefer to read to EOF. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> --- It might be easier/better to alter the POLLHUP handling, but I am struggling to work out what effect that would have on the bootloader pty handling. --- tools/libxl/libxl_aoutils.c | 2 +- tools/libxl/libxl_internal.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/libxl/libxl_aoutils.c b/tools/libxl/libxl_aoutils.c index 9183716..2b39432 100644 --- a/tools/libxl/libxl_aoutils.c +++ b/tools/libxl/libxl_aoutils.c @@ -207,7 +207,7 @@ static void datacopier_readable(libxl__egc *egc, libxl__ev_fd *ev, if (datacopier_pollhup_handled(egc, dc, revents, 0)) return; - if (revents & ~POLLIN) { + if (revents & ~(POLLIN | (dc->suppress_pollhup ? POLLHUP : 0))) { LOG(ERROR, "unexpected poll event 0x%x (should be POLLIN)" " on %s during copy of %s", revents, dc->readwhat, dc->copywhat); datacopier_callback(egc, dc, -1, 0); diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 056843a..537b523 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -2431,6 +2431,7 @@ struct libxl__datacopier_state { FILE *log; /* gets a copy of everything */ libxl__datacopier_callback *callback; libxl__datacopier_callback *callback_pollhup; + int suppress_pollhup; /* remaining fields are private to datacopier */ libxl__ev_fd toread, towrite; ssize_t used; -- 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 |