[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.