[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 23/24] libxl: child processes cleanups
On Mon, 2012-04-16 at 18:18 +0100, Ian Jackson wrote: > Abolish libxl_fork. Its only callers were in xl. Its functionality > is now moved elsewhere, as follows: > > * The "logging version of fork", which is what it was billed as, is now > xl_fork, which also dies on failure. > > * Closing the xenstore handle in the child is now done in > libxl__ev_child_fork, which is the only remaining place where fork > is called in libxl. > > * We provide a new function libxl__ev_child_xenstore_reopen for > in-libxl children to make the ctx useable for xenstore again. > > * Consequently libxl__spawn_record_pid now no longer needs to mess > about with its own xenstore handle. As a bonus it can now just use > libxl__xs_write. > > Also, since we have now converted all the forkers in libxl, we can > always honour the fork_replacement childproc hook - so do so. > > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > --- > tools/libxl/libxl_exec.c | 35 ++++++++++++++++------------------- > tools/libxl/libxl_fork.c | 25 ++++++++++++++++++++++++- > tools/libxl/libxl_internal.h | 5 +++++ > tools/libxl/libxl_utils.c | 21 --------------------- > tools/libxl/libxl_utils.h | 3 +-- > tools/libxl/xl.c | 12 ++++++++++++ > tools/libxl/xl.h | 1 + > tools/libxl/xl_cmdimpl.c | 5 ++--- > 8 files changed, 61 insertions(+), 46 deletions(-) > > diff --git a/tools/libxl/libxl_exec.c b/tools/libxl/libxl_exec.c > index d44b702..d681736 100644 > --- a/tools/libxl/libxl_exec.c > +++ b/tools/libxl/libxl_exec.c > > @@ -302,7 +291,15 @@ int libxl__spawn_spawn(libxl__egc *egc, > libxl__spawn_state *ss) > > /* we are now the middle process */ > > - child = fork(); > + pid_t (*fork_replacement)(void*) = > + CTX->childproc_hooks > + ? CTX->childproc_hooks->fork_replacement > + : 0; > + child = > + fork_replacement > + ? fork_replacement(CTX->childproc_user) > + : fork(); A helper function or macro would be useful here? > + > if (child == -1) > exit(255); > if (!child) { > diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h > index fb4dee8..3e90ac4 100644 > --- a/tools/libxl/libxl_internal.h > +++ b/tools/libxl/libxl_internal.h > @@ -627,6 +627,11 @@ static inline void libxl__ev_child_init(libxl__ev_child > *childw_out) > static inline int libxl__ev_child_inuse(libxl__ev_child *childw_out) > { return childw_out->pid >= 0; } > > +/* Useable (only) in the child to once more make the ctx useable for > + * xenstore operations. Specifically "the child" is the middle child of a spawn? Otherwise the constraint must be something like "before any threads are created in the new process", or something like that? > logs failure in the form "what: <error > + * message>". */ > +_hidden int libxl__ev_child_xenstore_reopen(libxl__gc *gc, const char *what); > + > > /* > * Other event-handling support provided by the libxl event core to Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |