[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 09/15] libxl: datacopier: provide "prefix data" facilit
On Thu, 2012-05-31 at 11:32 +0100, Ian Jackson wrote: > > On Wed, 2012-05-30 at 17:16 +0100, Ian Jackson wrote: > > > @@ -1812,6 +1812,12 @@ _hidden void > > > libxl__datacopier_init(libxl__datacopier_state *dc); > > > _hidden void libxl__datacopier_kill(libxl__datacopier_state *dc); > > > _hidden int libxl__datacopier_start(libxl__datacopier_state *dc); > > > > > > +/* Inserts literal data into the output stream. > > > + * May safely be used only immediately after libxl__datacopier_start. > > > > After datacopier_start the fds are registered, is there not a race > > between those events firing (perhaps in another thread which has called > > into libxl) and this thread? > > No, because we have the ctx mutex held all of the time. Ah!. > > And there isn't a reentrancy hazard either. As the comments in > libxl_internal.h have it: > > * int libxl__ev_KIND_register(libxl__gc *gc, libxl__ev_KIND *GEN, > * libxl__ev_KIND_callback *FUNC, > * DETAILS); > * [...]. FUNC will > * not be called from within the call to _register. [...] > > I think given your question this warrants a comment: > > @@ -78,6 +78,13 @@ void libxl__datacopier_prefixdata(libxl__egc *egc, > libxl__datacopier_state *dc, > const void *data, size_t len) > { > libxl__datacopier_buf *buf; > + /* > + * It is safe for this to be called immediately after _start, as > + * is documented in the public comment. _start's caller must have > + * the mutex locked, so other threads don't get to mess with the > + * contents, and the fd events cannot happen reentrantly. Perhaps this could be more explicit about having to hold the mutex from before _start until after any _prefixdata calls? Perhaps "...called immediately after _start, while still holding the mutex, as is documented in the public ..." ? "The mutex" here is the CTX lock, right? > So we > + * are guaranteed to beat the first data from the read fd. > + */ > > > Is the safe place not between datacopier_init and the rest of > > datacopier_start? > > No, because _start calls _init (just like all the > libxl__*_make_events_happen functions do). I spotted that, which is why I said between the _init and the "rest of" _start, but my original premise was wrong anyway so never mind... > > Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |