[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] libxl: use libxl_fd_set_{cloexec, nonblock} helpers
... instead of open-coding them or not using them at all. This in particular fixes a build (and presumably also runtime) problem on old enough libc due to the recent introduction of a use of O_CLOEXEC. The other two changes are only of cleanup kind. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -977,7 +977,7 @@ void libxl__xc_domain_restore_done(libxl libxl_ctx *ctx = libxl__gc_owner(gc); char **vments = NULL, **localents = NULL; struct timeval start_time; - int i, esave, flags; + int i, esave; /* convenience aliases */ const uint32_t domid = dcs->guest_domid; @@ -1046,15 +1046,10 @@ out: esave = errno; - flags = fcntl(fd, F_GETFL); - if (flags == -1) { - LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unable to get flags on restore fd"); - } else { - flags &= ~O_NONBLOCK; - if (fcntl(fd, F_SETFL, flags) == -1) - LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unable to put restore fd" + ret = libxl_fd_set_nonblock(ctx, fd, 0); + if (ret) + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unable to put restore fd" " back to blocking mode"); - } errno = esave; domcreate_rebuild_done(egc, dcs, ret); --- a/tools/libxl/libxl_qmp.c +++ b/tools/libxl/libxl_qmp.c @@ -358,19 +358,14 @@ static int qmp_open(libxl__qmp_handler * int timeout) { int ret; - int flags = 0; int i = 0; qmp->qmp_fd = socket(AF_UNIX, SOCK_STREAM, 0); if (qmp->qmp_fd < 0) { return -1; } - if ((flags = fcntl(qmp->qmp_fd, F_GETFL)) == -1) { - flags = 0; - } - if (fcntl(qmp->qmp_fd, F_SETFL, flags | O_NONBLOCK) == -1) { - return -1; - } + ret = libxl_fd_set_nonblock(qmp->ctx, qmp->qmp_fd, 1); + if (ret) return -1; ret = libxl_fd_set_cloexec(qmp->ctx, qmp->qmp_fd, 1); if (ret) return -1; --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -1047,11 +1047,17 @@ int libxl__random_bytes(libxl__gc *gc, u int fd; int ret; - fd = open(dev, O_RDONLY | O_CLOEXEC); + fd = open(dev, O_RDONLY); if (fd < 0) { LOGE(ERROR, "failed to open \"%s\"", dev); return ERROR_FAIL; } + ret = libxl_fd_set_cloexec(CTX, fd, 1); + if (ret) { + close(fd); + LOGE(ERROR, "failed to set close-on-exec on handle to \"%s\"", dev); + return ERROR_FAIL; + } ret = libxl_read_exactly(CTX, fd, buf, len, dev, NULL); Attachment:
libxl-use-cloexec-nonblock-helpers.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |