[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] fix race condition between libvirtd event handling and libxl fd deregister

Ian Campbell wrote:
> On Mon, 2012-12-10 at 16:56 +0000, Ian Jackson wrote:
>> Ian Jackson writes ("Re: [PATCH] fix race condition between libvirtd event 
>> handling and libxl fd deregister"):
>>> I'm not surprised that the original patch makes Bamvor's symptoms go
>>> away.  Bamvor had one of the possible races (the fd-related one) but
>>> not the other.
>> Here (followups to this message, shortly) is v3 of my two-patch series
>> which after conversation with Ian C I think fully fixes the race, and
>> which I have tested now.
> Is this version now tested and ready to be applied?

Hi Ian,

I have been doing quite a bit of testing with this version, but have one
remaining issue wrt races between the libvirt libxl driver and libxl. 
Earlier in this thread you mentioned this potential solution

"The other scheme which springs to mind is to do reference counting, with
the application holding a reference whenever the event is present in its
event loop (such that there is any chance of the event being generated)
and libxl holding a reference while it considers the event to be active"

I thought this was a good approach, particularly since libvirt has
excellent support for it.  When libxl registers an fd/timer, I create an
object containing the details with an initial reference count of 1.  If
the fd/timer is successfully injected into libvirt's event loop, I take
another reference on the object.  The object is only destroyed after
libxl has deregistered the fd/timer *and* it has been removed from
libvirt's event loop.  For each fd/timer object, I also increment the
reference count on my libxl_ctx object.  This approach works well IMO. 
It ensures the libxl_ctx exists for the life of all fd/timer objects.

The only wrench in this machinery is that watch_efd is not deregistered
until calling libxl_ctx_free().  But I never get to that point since
that fd registration holds a reference on my libxl_ctx :(.  My first
thought was to cleanup/deregister that fd on domain death, but I didn't
have much success creating a patch.  Perhaps I should look at that again...

Some other thoughts included: 1) an API to remove fd/timers from libxl,
2) ensure no callbacks are invoked from libxl_ctx_free().


Xen-devel mailing list



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