|
[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 |