[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 04/10] libxl: event: Make LIBXL__EVENT_DISASTER take a gc, not an egc
We are going to want to change libxl__poller_wakeup to take a gc. In theory there is a risk here that it would be called inappropriately in a future patch but this seems unlikely. Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Tested-by: George Dunlap <george.dunlap@xxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> --- v2: New patch --- tools/libxl/libxl_aoutils.c | 2 +- tools/libxl/libxl_disk.c | 4 ++-- tools/libxl/libxl_domain.c | 2 +- tools/libxl/libxl_event.c | 21 ++++++++++----------- tools/libxl/libxl_fork.c | 11 ++++++----- tools/libxl/libxl_internal.h | 10 +++++----- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/tools/libxl/libxl_aoutils.c b/tools/libxl/libxl_aoutils.c index e24e4eed53..1be858c93c 100644 --- a/tools/libxl/libxl_aoutils.c +++ b/tools/libxl/libxl_aoutils.c @@ -282,7 +282,7 @@ static void datacopier_readable(libxl__egc *egc, libxl__ev_fd *ev, hupchk.revents = 0; r = poll(&hupchk, 1, 0); if (r < 0) - LIBXL__EVENT_DISASTER(egc, + LIBXL__EVENT_DISASTER(gc, "unexpected failure polling fd for datacopier eof hup check", errno, 0); if (datacopier_pollhup_handled(egc, dc, fd, hupchk.revents, 0)) diff --git a/tools/libxl/libxl_disk.c b/tools/libxl/libxl_disk.c index 64a6691424..a463334130 100644 --- a/tools/libxl/libxl_disk.c +++ b/tools/libxl/libxl_disk.c @@ -33,7 +33,7 @@ static void disk_eject_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w, return; if (libxl__xs_printf(gc, XBT_NULL, wpath, "")) { - LIBXL__EVENT_DISASTER(egc, "xs_write failed acknowledging eject", + LIBXL__EVENT_DISASTER(gc, "xs_write failed acknowledging eject", errno, LIBXL_EVENT_TYPE_DISK_EJECT); return; } @@ -43,7 +43,7 @@ static void disk_eject_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w, rc = libxl__xs_read_checked(gc, XBT_NULL, evg->be_ptr_path, &backend); if (rc) { - LIBXL__EVENT_DISASTER(egc, "xs_read failed reading be_ptr_path", + LIBXL__EVENT_DISASTER(gc, "xs_read failed reading be_ptr_path", errno, LIBXL_EVENT_TYPE_DISK_EJECT); return; } diff --git a/tools/libxl/libxl_domain.c b/tools/libxl/libxl_domain.c index 5714501778..b59cc65750 100644 --- a/tools/libxl/libxl_domain.c +++ b/tools/libxl/libxl_domain.c @@ -892,7 +892,7 @@ static void domain_death_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w, rc = xc_domain_getinfolist(CTX->xch, evg->domid, nentries, domaininfos); if (rc == -1) { - LIBXL__EVENT_DISASTER(egc, "xc_domain_getinfolist failed while" + LIBXL__EVENT_DISASTER(gc, "xc_domain_getinfolist failed while" " processing @releaseDomain watch event", errno, 0); goto out; diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c index be37e12bb0..16e6786889 100644 --- a/tools/libxl/libxl_event.c +++ b/tools/libxl/libxl_event.c @@ -261,7 +261,7 @@ short libxl__fd_poll_recheck(libxl__egc *egc, int fd, short events) { break; assert(r<0); if (errno != EINTR) { - LIBXL__EVENT_DISASTER(egc, "failed poll to check for fd", errno, 0); + LIBXL__EVENT_DISASTER(gc, "failed poll to check for fd", errno, 0); return 0; } } @@ -509,14 +509,14 @@ static void watchfd_callback(libxl__egc *egc, libxl__ev_fd *ev, EGC_GC; if (revents & (POLLERR|POLLHUP)) - LIBXL__EVENT_DISASTER(egc, "unexpected poll event on watch fd", 0, 0); + LIBXL__EVENT_DISASTER(gc, "unexpected poll event on watch fd", 0, 0); for (;;) { char **event = xs_check_watch(CTX->xsh); if (!event) { if (errno == EAGAIN) break; if (errno == EINTR) continue; - LIBXL__EVENT_DISASTER(egc, "cannot check/read watches", errno, 0); + LIBXL__EVENT_DISASTER(gc, "cannot check/read watches", errno, 0); return; } @@ -705,7 +705,7 @@ static int evtchn_revents_check(libxl__egc *egc, int revents) if (revents & ~POLLIN) { LOG(ERROR, "unexpected poll event on event channel fd: %x", revents); - LIBXL__EVENT_DISASTER(egc, + LIBXL__EVENT_DISASTER(gc, "unexpected poll event on event channel fd", 0, 0); libxl__ev_fd_deregister(gc, &CTX->evtchn_efd); return ERROR_FAIL; @@ -746,7 +746,7 @@ static void evtchn_fd_callback(libxl__egc *egc, libxl__ev_fd *ev, if (port < 0) { if (errno == EAGAIN) break; - LIBXL__EVENT_DISASTER(egc, + LIBXL__EVENT_DISASTER(gc, "unexpected failure fetching occurring event port number from evtchn", errno, 0); return; @@ -966,7 +966,7 @@ static void domaindeathcheck_callback(libxl__egc *egc, libxl__ev_xswatch *w, libxl__domaindeathcheck_stop(gc,dc); if (errno!=ENOENT) { - LIBXL__EVENT_DISASTER(egc,"failed to read xenstore" + LIBXL__EVENT_DISASTER(gc,"failed to read xenstore" " for domain detach check", errno, 0); return; } @@ -1279,7 +1279,7 @@ static void afterpoll_internal(libxl__egc *egc, libxl__poller *poller, if (afterpoll_check_fd(poller,fds,nfds, poller->wakeup_pipe[0],POLLIN)) { int e = libxl__self_pipe_eatall(poller->wakeup_pipe[0]); - if (e) LIBXL__EVENT_DISASTER(egc, "read wakeup", e, 0); + if (e) LIBXL__EVENT_DISASTER(gc, "read wakeup", e, 0); } for (;;) { @@ -1365,12 +1365,10 @@ void libxl_osevent_occurred_timeout(libxl_ctx *ctx, void *for_libxl) CTX_UNLOCK_EGC_FREE; } -void libxl__event_disaster(libxl__egc *egc, const char *msg, int errnoval, +void libxl__event_disaster(libxl__gc *gc, const char *msg, int errnoval, libxl_event_type type /* may be 0 */, const char *file, int line, const char *func) { - EGC_GC; - libxl__log(CTX, XTL_CRITICAL, errnoval, file, line, func, INVALID_DOMID, "DISASTER in event loop: %s%s%s%s", msg, @@ -1672,8 +1670,9 @@ void libxl__poller_put(libxl_ctx *ctx, libxl__poller *p) void libxl__poller_wakeup(libxl__egc *egc, libxl__poller *p) { + EGC_GC; int e = libxl__self_pipe_wakeup(p->wakeup_pipe[1]); - if (e) LIBXL__EVENT_DISASTER(egc, "cannot poke watch pipe", e, 0); + if (e) LIBXL__EVENT_DISASTER(gc, "cannot poke watch pipe", e, 0); } /* diff --git a/tools/libxl/libxl_fork.c b/tools/libxl/libxl_fork.c index cf170b9085..9a4709b9a4 100644 --- a/tools/libxl/libxl_fork.c +++ b/tools/libxl/libxl_fork.c @@ -211,6 +211,7 @@ int libxl__carefd_fd(const libxl__carefd *cf) /* Like waitpid(,,WNOHANG) but handles all errors except ECHILD. */ static pid_t checked_waitpid(libxl__egc *egc, pid_t want, int *status) { + EGC_GC; for (;;) { pid_t got = waitpid(want, status, WNOHANG); if (got != -1) @@ -219,7 +220,7 @@ static pid_t checked_waitpid(libxl__egc *egc, pid_t want, int *status) return got; if (errno == EINTR) continue; - LIBXL__EVENT_DISASTER(egc, "waitpid() failed", errno, 0); + LIBXL__EVENT_DISASTER(gc, "waitpid() failed", errno, 0); return 0; } } @@ -507,7 +508,7 @@ static void childproc_checkall(libxl__egc *egc) found: if (got == -1) { LIBXL__EVENT_DISASTER - (egc, "waitpid() gave ECHILD but we have a child", + (gc, "waitpid() gave ECHILD but we have a child", ECHILD, 0); /* it must have finished but we don't know its status */ status = 255<<8; /* no wait.h macro for this! */ @@ -545,14 +546,14 @@ static void sigchld_selfpipe_handler(libxl__egc *egc, libxl__ev_fd *ev, if (revents & ~POLLIN) { LOG(ERROR, "unexpected poll event 0x%x on SIGCHLD self pipe", revents); - LIBXL__EVENT_DISASTER(egc, + LIBXL__EVENT_DISASTER(gc, "unexpected poll event on SIGCHLD self pipe", 0, 0); } assert(revents & POLLIN); int e = libxl__self_pipe_eatall(selfpipe); - if (e) LIBXL__EVENT_DISASTER(egc, "read sigchld pipe", e, 0); + if (e) LIBXL__EVENT_DISASTER(gc, "read sigchld pipe", e, 0); if (CTX->childproc_hooks->chldowner == libxl_sigchld_owner_libxl_always_selective_reap) { @@ -581,7 +582,7 @@ static void sigchld_selfpipe_handler(libxl__egc *egc, libxl__ev_fd *ev, " libxl_childproc_hooks->reaped_callback" " (for pid=%lu, status=%d; error code %d)", (unsigned long)pid, status, rc); - LIBXL__EVENT_DISASTER(egc, disasterbuf, 0, 0); + LIBXL__EVENT_DISASTER(gc, disasterbuf, 0, 0); return; } } else { diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 983fffac7a..328ecf3e1e 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1281,8 +1281,8 @@ _hidden libxl_event *libxl__event_new(libxl__egc*, libxl_event_type, /* * In general, call this via the macro LIBXL__EVENT_DISASTER. * - * Event-generating functions may call this if they might have wanted - * to generate an event (either an internal one ie a + * Event-generating functions, or ao machinery, may call this if they + * might have wanted to generate an event (either an internal one ie a * libxl__ev_FOO_callback or an application event), but are prevented * from doing so due to eg lack of memory. * @@ -1290,12 +1290,12 @@ _hidden libxl_event *libxl__event_new(libxl__egc*, libxl_event_type, * then crash, although it may fail (and henceforth leave things in a * state where many or all calls fail). */ -_hidden void libxl__event_disaster(libxl__egc*, const char *msg, int errnoval, +_hidden void libxl__event_disaster(libxl__gc*, const char *msg, int errnoval, libxl_event_type type /* may be 0 */, const char *file, int line, const char *func); -#define LIBXL__EVENT_DISASTER(egc, msg, errnoval, type) \ - libxl__event_disaster(egc, msg, errnoval, type, __FILE__,__LINE__,__func__) +#define LIBXL__EVENT_DISASTER(gc, msg, errnoval, type) \ + libxl__event_disaster(gc, msg, errnoval, type, __FILE__,__LINE__,__func__) /* Fills in, or disposes of, the resources held by, a poller whose -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |