|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 06/21] libxl: domain save/restore: run in a separate process
Ian Campbell writes ("Re: [Xen-devel] [PATCH 06/21] libxl: domain save/restore:
run in a separate process"):
> > [...]
> > + pid_t pid = libxl__ev_child_fork(gc, &shs->child, helper_exited);
> > + if (!pid) {
> > + if (stream_fd <= 2) {
> > + stream_fd = dup(stream_fd);
> > + if (stream_fd < 0) {
> > + LOGE(ERROR,"dup migration stream fd");
>
> LOGE uses CTX -- is that safe after fork, and will it go anywhere
> anyway?
>From the doc comment for libxl__ev_child_fork:
* The child should go on to exec (or exit) soon. The child may not
* make any further calls to libxl infrastructure, except for memory
* allocation and logging. If the child needs to use xenstore it
* must open its own xs handle and use it directly, rather than via
* the libxl event machinery.
So this is fine according to the doc comment. And the doc comment is,
I think, justified. The logging might go to some file where we share
the descriptor with the parent, but logs are opened with O_APPEND, so
that's fine. Likewise if it's going to syslog, the socket will be
fine.
That general-purpose xtl loggers need to work in children isn't
explicitly documented in xentoollog.h but I think it's fine to leave
it that way.
> > + exit(-1);
> > + }
> > + }
> > + libxl_fd_set_cloexec(CTX, stream_fd, 0);
> > + *stream_fd_arg = GCSPRINTF("%d", stream_fd);
> > +
> > + for (i=0; i<num_preserve_fds; i++)
> > + if (preserve_fds[i] >= 0)
> > + libxl_fd_set_cloexec(CTX, preserve_fds[i], 0);
>
> The doc comment says these cannot be 0,1,2. Possibly not worth enforcing
> though.
If this restriction is violated then things are going to go very badly
wrong, so an assertion is probably a good idea. (This will kill the
migration child, not the parent.)
> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |