[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/5] xl: Introduce children[].description and xl_report_child_exitstatus
On Wed, 2014-03-19 at 14:28 +0000, Ian Jackson wrote: > 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> Acked-by: 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) { _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |