[Libguestfs] [PATCH libnbd v3 1/2] lib: Implement closure lifetimes.
Richard W.M. Jones
rjones at redhat.com
Thu Jul 25 17:03:22 UTC 2019
On Thu, Jul 25, 2019 at 11:01:18AM -0500, Eric Blake wrote:
> On 7/25/19 10:43 AM, Eric Blake wrote:
>
> >> +++ b/generator/states-reply-structured.c
> >> @@ -298,7 +298,7 @@
> >> * current error rather than any earlier one. If the callback fails
> >> * without setting errno, then use the server's error below.
> >> */
> >> - if (cmd->cb.fn.read (cmd->cb.fn_user_data,
> >> + if (cmd->cb.fn.read (LIBNBD_CALLBACK_VALID, cmd->cb.fn_user_data,
> >> cmd->data + (offset - cmd->offset),
> >> 0, offset, LIBNBD_READ_ERROR, &scratch) == -1)
> >> if (cmd->error == 0)
> >
> > We could still optimize this file based on NBD_REPLY_FLAG_DONE, but that
> > can be a followup.
> >
> >> @@ -499,7 +499,7 @@
> >> /* Call the caller's extent function. */
> >> int error = cmd->error;
> >>
> >> - if (cmd->cb.fn.extent (cmd->cb.fn_user_data,
> >> + if (cmd->cb.fn.extent (LIBNBD_CALLBACK_VALID, cmd->cb.fn_user_data,
> >> meta_context->name, cmd->offset,
> >> &h->bs_entries[1], (length-4) / 4, &error) == -1)
> >> if (cmd->error == 0)
> >
> > Hmm - no change to the FINISH state, which means you are relying on
> > command retirement to free chunk/extent instead. As long as that
> > happens, we should be okay, though.
>
> Another thought: if a user calls nbd_aio_pread_structured_callback (...,
> chunk, &data, callback, &data, ...), where chunk ignores FREE but
> callback(FREE) calls free(data), is there any problem with the fact that
> we may end up with a call order of callback(VALID|FREE) before
> chunk(FREE)? I think we're okay - as long as chunk doesn't dereference
> data except when VALID is set, then the fact that chunk(FREE) is called
> with a stale pointer should not be a problem.
There's no claim about what order we call the free functions for
different callbacks, so I guess callers will simply need to deal with
it. It doesn't affect our use in the language bindings.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v
More information about the Libguestfs
mailing list