[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/4] libxl: event handling: ao_inprogress does waits while reports outstanding
On Mon, Feb 09, 2015 at 03:51:11PM +0000, Ian Jackson wrote: > libxl__ao_inprogress needs to check (like > libxl__ao_complete_check_progress_reports) that there are no > oustanding progress callbacks. > > Otherwise it might happen that we would destroy the ao while another > thread has an outstanding callback its egc report queue. The other > thread would then, in its egc_run_callbacks, touch the destroyed ao. > > Instead, when this happens in libxl__ao_inprogress, simply run round > the event loop again. The thread which eventually makes the callback > will spot our poller in the ao, and notify the poller, waking us up. > > This fixes an assertion failure race seen with libvirt: > libvirtd: libxl_event.c:1792: libxl__ao_complete_check_progress_reports: > Assertion `ao->in_initiator' failed. > or (after "Add an assert to egc_run_callbacks") > libvirtd: libxl_event.c:1338: egc_run_callbacks: Assertion `aop->ao->magic > == 0xA0FACE00ul' failed. > > Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> > CC: Ian Campbell <ian.campbell@xxxxxxxxxx> > CC: Wei Liu <wei.liu2@xxxxxxxxxx> > CC: Jim Fehlig <jfehlig@xxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> > --- > tools/libxl/libxl_event.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c > index 89ca6d2..595da2b 100644 > --- a/tools/libxl/libxl_event.c > +++ b/tools/libxl/libxl_event.c > @@ -1878,7 +1878,7 @@ int libxl__ao_inprogress(libxl__ao *ao, > for (;;) { > assert(ao->magic == LIBXL__AO_MAGIC); > > - if (ao->complete) { > + if (!ao_work_outstanding(ao)) { > rc = ao->rc; > ao->notified = 1; > break; > -- > 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 |