[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4/5] xl: Remove clone-and-hack in do_daemonize
do_daemonize had open-coded handling of the results from xl_waitpid. Instead, break out the meat of console_child_report into a new function child_report (which returns an error code), and use it. No functional change other than a change to the message printed if forking the daemonic child fails. Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx> --- tools/libxl/xl.h | 4 ++++ tools/libxl/xl_cmdimpl.c | 48 +++++++++++++++++++++------------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h index 40a42b3..10a2e66 100644 --- a/tools/libxl/xl.h +++ b/tools/libxl/xl.h @@ -153,6 +153,10 @@ void xl_report_child_exitstatus(xentoollog_level level, xlchildnum child, pid_t pid, int status); /* like libxl_report_child_exitstatus, but uses children[].description */ +int child_report(xlchildnum child); + /* waits and expects child to exit status 0. + * otherwise, logs and returns ERROR_FAIL */ + /* 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 d61d301..27b6f40 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -205,19 +205,28 @@ static uint32_t find_domain(const char *p) return domid; } -static void console_child_report(xlchildnum child) +int child_report(xlchildnum child) { - if (xl_child_pid(child)) { - int status; - pid_t got = xl_waitpid(child, &status, 0); - if (got < 0) - fprintf(stderr, "xl: warning, failed to waitpid for %s: %s\n", - children[child].description, strerror(errno)); - else if (status) - xl_report_child_exitstatus(XTL_ERROR, child, got, status); + int status; + pid_t got = xl_waitpid(child, &status, 0); + if (got < 0) { + fprintf(stderr, "xl: warning, failed to waitpid for %s: %s\n", + children[child].description, strerror(errno)); + return ERROR_FAIL; + } else if (status) { + xl_report_child_exitstatus(XTL_ERROR, child, got, status); + return ERROR_FAIL; + } else { + return 0; } } +static void console_child_report(xlchildnum child) +{ + if (xl_child_pid(child)) + child_report(child); +} + static int vncviewer(uint32_t domid, int autopass) { libxl_vncviewer_exec(ctx, domid, autopass); @@ -431,26 +440,13 @@ out: static int do_daemonize(char *name) { char *fullname; - pid_t child1, got_child; + pid_t child1; int nullfd, ret = 0; - int status = 0; - child1 = xl_fork(child_waitdaemon, "domain monitoring daemon"); + child1 = xl_fork(child_waitdaemon, "domain monitoring daemonizing child"); if (child1) { - got_child = xl_waitpid(child_waitdaemon, &status, 0); - if (got_child != child1) { - assert(got_child == -1); - LOG("failed to wait for daemonizing child: %s", strerror(errno)); - ret = ERROR_FAIL; - goto out; - } - - if (status) { - libxl_report_child_exitstatus(ctx, XTL_ERROR, - "daemonizing child", child1, status); - ret = ERROR_FAIL; - goto out; - } + ret = child_report(child_waitdaemon); + if (ret) goto out; ret = 1; goto out; } -- 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 |