[Libguestfs] [PATCH libnbd] examples: Fix theoretical cookie race in example.
Eric Blake
eblake at redhat.com
Tue Jul 30 14:57:14 UTC 2019
On 7/30/19 5:51 AM, Richard W.M. Jones wrote:
> There was a theoretic race in this example: If the server was very
> fast at handling commands then it's possible that in a call such as:
>
> cookie = nbd_aio_pread_callback (..., callback, ...);
> buffers[i].cookie = cookie;
>
> nbd_aio_pread_callback finished and calls the callback before
> returning. buffers[i].cookie would therefore not be set, but the
> callback() function was checking the list of buffers for the cookie.
> This would have caused an abort() in the existing code, although we
> have never observed that.
>
> The new code, instead of relying on the cookie, passes a pointer to
> &buffers[i], so the callback no longer needs to search the list of
> buffers (this is also quicker).
>
> This necessitated another change however: previously we were copying
> buffers around to ensure that the next free buffer was always at
> &buffers[nr_buffers]. Instead of that introduce a new state
> (BUFFER_UNUSED) and search the short list of buffers once when looking
> for a free buffer.
>
> Thanks: Eric Blake.
> ---
> examples/glib-main-loop.c | 96 +++++++++++++--------------------------
> 1 file changed, 32 insertions(+), 64 deletions(-)
Avoids a potential race, and uses fewer lines of code. What's not to
like about it :)
ACK.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20190730/0a624b24/attachment.sig>
More information about the Libguestfs
mailing list