[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 09/12] libxl: fork: Rename sigchld handler functions
We are going to change these functions so that different libxl ctx's can share a single SIGCHLD handler. Rename them now to a new name which doesn't imply unconditional handler installation or removal. Also note in the comments that they are idempotent. No functional change. Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> Cc: Jim Fehlig <jfehlig@xxxxxxxx> Cc: Ian Campbell <Ian.Campbell@xxxxxxxxxx> --- tools/libxl/libxl.c | 2 +- tools/libxl/libxl_fork.c | 22 +++++++++++----------- tools/libxl/libxl_internal.h | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 2845ca4..4679b51 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -170,7 +170,7 @@ int libxl_ctx_free(libxl_ctx *ctx) /* If we have outstanding children, then the application inherits * them; we wish the application good luck with understanding * this if and when it reaps them. */ - libxl__sigchld_removehandler(gc); + libxl__sigchld_notneeded(gc); if (ctx->sigchld_selfpipe[0] >= 0) { close(ctx->sigchld_selfpipe[0]); diff --git a/tools/libxl/libxl_fork.c b/tools/libxl/libxl_fork.c index 16e17f6..a15af8e 100644 --- a/tools/libxl/libxl_fork.c +++ b/tools/libxl/libxl_fork.c @@ -194,7 +194,7 @@ static void sigchld_removehandler_core(void) sigchld_owner = 0; } -void libxl__sigchld_removehandler(libxl__gc *gc) /* non-reentrant */ +void libxl__sigchld_notneeded(libxl__gc *gc) /* non-reentrant, idempotent */ { int rc; @@ -210,7 +210,7 @@ void libxl__sigchld_removehandler(libxl__gc *gc) /* non-reentrant */ } } -int libxl__sigchld_installhandler(libxl__gc *gc) /* non-reentrant */ +int libxl__sigchld_needed(libxl__gc *gc) /* non-reentrant, idempotent */ { int r, rc; @@ -274,18 +274,18 @@ static bool chldmode_ours(libxl_ctx *ctx, bool creating) abort(); } -static void perhaps_removehandler(libxl__gc *gc) +static void perhaps_sigchld_notneeded(libxl__gc *gc) { if (!chldmode_ours(CTX, 0)) - libxl__sigchld_removehandler(gc); + libxl__sigchld_notneeded(gc); } -static int perhaps_installhandler(libxl__gc *gc, bool creating) +static int perhaps_sigchld_needed(libxl__gc *gc, bool creating) { int rc; if (chldmode_ours(CTX, creating)) { - rc = libxl__sigchld_installhandler(gc); + rc = libxl__sigchld_needed(gc); if (rc) return rc; } return 0; @@ -314,7 +314,7 @@ static int childproc_reaped(libxl__egc *egc, pid_t pid, int status) found: childproc_reaped_ours(egc, ch, status); - perhaps_removehandler(gc); + perhaps_sigchld_notneeded(gc); return 0; } @@ -445,7 +445,7 @@ pid_t libxl__ev_child_fork(libxl__gc *gc, libxl__ev_child *ch, CTX_LOCK; int rc; - perhaps_installhandler(gc, 1); + perhaps_sigchld_needed(gc, 1); pid_t pid = CTX->childproc_hooks->fork_replacement @@ -473,7 +473,7 @@ pid_t libxl__ev_child_fork(libxl__gc *gc, libxl__ev_child *ch, rc = pid; out: - perhaps_removehandler(gc); + perhaps_sigchld_notneeded(gc); CTX_UNLOCK; return rc; } @@ -492,8 +492,8 @@ void libxl_childproc_setmode(libxl_ctx *ctx, const libxl_childproc_hooks *hooks, ctx->childproc_hooks = hooks; ctx->childproc_user = user; - perhaps_removehandler(gc); - perhaps_installhandler(gc, 0); /* idempotent, ok to ignore errors for now */ + perhaps_sigchld_notneeded(gc); + perhaps_sigchld_needed(gc, 0); /* idempotent, ok to ignore errors for now */ CTX_UNLOCK; GC_FREE; diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 1bd23ff..fba681d 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -838,8 +838,8 @@ _hidden void libxl__poller_wakeup(libxl__egc *egc, libxl__poller *p); /* Internal to fork and child reaping machinery */ extern const libxl_childproc_hooks libxl__childproc_default_hooks; -int libxl__sigchld_installhandler(libxl__gc*); /* non-reentrant; logs errs */ -void libxl__sigchld_removehandler(libxl__gc*); /* non-reentrant */ +int libxl__sigchld_needed(libxl__gc*); /* non-reentrant idempotent, logs errs */ +void libxl__sigchld_notneeded(libxl__gc*); /* non-reentrant idempotent */ int libxl__self_pipe_wakeup(int fd); /* returns 0 or -1 setting errno */ int libxl__self_pipe_eatall(int fd); /* returns 0 or -1 setting errno */ -- 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 |