[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/5] xl: Introduce children[].description and xl_report_child_exitstatus
We record the descriptive string for the child in the children[] array, and use it when reporting the exit status. The only functional change is that the message reported for the migration child is changed from "migration target process" to "migration transport process". Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx> --- tools/libxl/xl.c | 10 +++++++++- tools/libxl/xl.h | 8 +++++++- tools/libxl/xl_cmdimpl.c | 21 ++++++++++----------- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c index 1d157fe..527b4c5 100644 --- a/tools/libxl/xl.c +++ b/tools/libxl/xl.c @@ -189,12 +189,13 @@ void postfork(void) xl_ctx_alloc(); } -pid_t xl_fork(xlchildnum child) { +pid_t xl_fork(xlchildnum child, const char *description) { xlchild *ch = &children[child]; int i; assert(!ch->pid); ch->reaped = 0; + ch->description = description; ch->pid = fork(); if (ch->pid == -1) { @@ -238,6 +239,13 @@ int xl_child_pid(xlchildnum child) return ch->pid; } +void xl_report_child_exitstatus(xentoollog_level level, + xlchildnum child, pid_t pid, int status) +{ + libxl_report_child_exitstatus(ctx, level, children[child].description, + pid, status); +} + static int xl_reaped_callback(pid_t got, int status, void *user) { int i; diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h index 280d39c..40a42b3 100644 --- a/tools/libxl/xl.h +++ b/tools/libxl/xl.h @@ -130,6 +130,7 @@ typedef struct { pid_t pid; /* 0: not in use */ int reaped; /* valid iff pid!=0 */ int status; /* valid iff reaped */ + const char *description; /* valid iff pid!=0 */ } xlchild; typedef enum { @@ -139,7 +140,8 @@ typedef enum { extern xlchild children[child_max]; -pid_t xl_fork(xlchildnum); /* like fork, but prints and dies if it fails */ +pid_t xl_fork(xlchildnum, const char *description); + /* like fork, but prints and dies if it fails */ void postfork(void); /* needed only if we aren't going to exec right away */ /* Handles EINTR. Clears out the xlchild so it can be reused. */ @@ -147,6 +149,10 @@ pid_t xl_waitpid(xlchildnum, int *status, int flags); int xl_child_pid(xlchildnum); /* returns 0 if child struct is not in use */ +void xl_report_child_exitstatus(xentoollog_level level, + xlchildnum child, pid_t pid, int status); + /* like libxl_report_child_exitstatus, but uses children[].description */ + /* global options */ extern int autoballoon; extern int run_hotplug_scripts; diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index e19b1cf..0c2eca3 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -220,8 +220,8 @@ static void vncviewer_child_report(void) if (got < 0) perror("xl: warning, failed to waitpid for vncviewer child"); else if (status) - libxl_report_child_exitstatus(ctx, XTL_ERROR, "vncviewer child", - xl_child_pid(child_vncviewer), status); + xl_report_child_exitstatus(XTL_ERROR, child_vncviewer, + got, status); } } @@ -229,7 +229,7 @@ static void autoconnect_vncviewer(uint32_t domid, int autopass) { vncviewer_child_report(); - pid_t pid = xl_fork(child_vncviewer); + pid_t pid = xl_fork(child_vncviewer, "vncviewer child"); if (pid) return; @@ -435,7 +435,7 @@ static int do_daemonize(char *name) int nullfd, ret = 0; int status = 0; - child1 = xl_fork(child_waitdaemon); + child1 = xl_fork(child_waitdaemon, "domain monitoring daemon"); if (child1) { got_child = xl_waitpid(child_waitdaemon, &status, 0); if (got_child != child1) { @@ -1991,8 +1991,8 @@ static void console_child_report(void) if (got < 0) perror("xl: warning, failed to waitpid for console child"); else if (status) - libxl_report_child_exitstatus(ctx, XTL_ERROR, "console child", - xl_child_pid(child_console), status); + xl_report_child_exitstatus(XTL_ERROR, child_console, + got, status); } } @@ -2005,7 +2005,7 @@ static void autoconnect_console(libxl_ctx *ctx_ignored, console_child_report(); - pid_t pid = xl_fork(child_console); + pid_t pid = xl_fork(child_console, "console child"); if (pid) return; @@ -3525,7 +3525,7 @@ static pid_t create_migration_child(const char *rune, int *send_fd, MUST( libxl_pipe(ctx, sendpipe) ); MUST( libxl_pipe(ctx, recvpipe) ); - child = xl_fork(child_migration); + child = xl_fork(child_migration, "migration transport process"); if (!child) { dup2(sendpipe[0], 0); @@ -3586,9 +3586,8 @@ static void migration_child_report(int recv_fd) { if (child == migration_child) { if (status) - libxl_report_child_exitstatus(ctx, XTL_INFO, - "migration target process", - migration_child, status); + xl_report_child_exitstatus(XTL_INFO, child_migration, + migration_child, status); break; } if (child == -1) { -- 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 |