From: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel@lists.xensource.com
Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>,
Ian Campbell <Ian.Campbell@citrix.com>
Subject: [PATCH 2/5] xl: Introduce children[].description and xl_report_child_exitstatus
Date: Wed, 19 Mar 2014 14:28:51 +0000 [thread overview]
Message-ID: <1395239334-19579-3-git-send-email-ian.jackson@eu.citrix.com> (raw)
In-Reply-To: <1395239334-19579-1-git-send-email-ian.jackson@eu.citrix.com>
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@eu.citrix.com>
CC: Ian Campbell <Ian.Campbell@citrix.com>
---
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
next prev parent reply other threads:[~2014-03-19 14:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-19 14:28 [PATCH 0/5] xl: console error handling improvements Ian Jackson
2014-03-19 14:28 ` [PATCH 1/5] xl: remove needless error checking from calls to xl_fork Ian Jackson
2014-03-21 13:47 ` Ian Campbell
2014-03-19 14:28 ` Ian Jackson [this message]
2014-03-21 13:47 ` [PATCH 2/5] xl: Introduce children[].description and xl_report_child_exitstatus Ian Campbell
2014-03-19 14:28 ` [PATCH 3/5] xl: Abolish vncviewer_child_report Ian Jackson
2014-03-21 13:48 ` Ian Campbell
2014-03-21 14:33 ` [PATCH 3/5] xl: Abolish vncviewer_child_report [and 1 more messages] Ian Jackson
2014-03-19 14:28 ` [PATCH 4/5] xl: Remove clone-and-hack in do_daemonize Ian Jackson
2014-03-21 13:49 ` Ian Campbell
2014-03-19 14:28 ` [PATCH 5/5] xl: console connection: Print errno value from exec Ian Jackson
2014-03-21 13:52 ` Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1395239334-19579-3-git-send-email-ian.jackson@eu.citrix.com \
--to=ian.jackson@eu.citrix.com \
--cc=Ian.Campbell@citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).