On 05/21/2011 01:21 AM, Paolo Bonzini wrote:
> On 05/21/2011 12:11 AM, Eric Blake wrote:
>> I think we're safe.  It shouldn't matter if thread 2 reads thread 3's
>> answer (because they are both read-only queries, and should be getting
>> the same answer; or even if the answers differ, reading the newer answer
>> is not horrible because it is still an accurate answer).
> 
> The queries could be for different disks, and one might fail.  The
> problem is mostly if the first fails and the second succeeds, and the
> program sees a success instead of a failure.
> 
> ... but a much simpler fix is to make statRetCode a pointer, so that
> there is nothing to do on the producer side after the flag has been
> reset.  I strongly suggest doing this, as it is a very simple change
> that Cannot Make Things Worse (TM).

Ah, that does make sense.  Instead of storing the answers directly in
the memory shared between query and migration loop, the shared memory
should instead store pointers to stack-local memory in the query code.
Thus, the migration loop writes back to unique memory, and the moment it
clears the condition flag, it doesn't matter if some other thread starts
overwriting the pointers, because the first caller now knows that its
answers are safe.

Federico, do you want to tackle this, or shall I?

-- 
Eric Blake   ebl...@redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to