On Thu, Feb 11, 2021 at 04:34:40PM +0100, Max Reitz wrote:
> On 10.02.21 10:26, Stefan Hajnoczi wrote:
> > From: Elena Ufimtseva <elena.ufimts...@oracle.com>
> > 
> > Adds qio_channel_readv_full_all_eof() and qio_channel_readv_full_all()
> > to read both data and FDs. Refactors existing code to use these helpers.
> > 
> > Signed-off-by: Elena Ufimtseva <elena.ufimts...@oracle.com>
> > Signed-off-by: John G Johnson <john.g.john...@oracle.com>
> > Signed-off-by: Jagannathan Raman <jag.ra...@oracle.com>
> > Acked-by: Daniel P. Berrangé <berra...@redhat.com>
> > Message-id: 
> > b059c4cc0fb741e794d644c144cc21372cad877d.1611938319.git.jag.ra...@oracle.com
> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com>
> > ---
> >   include/io/channel.h |  53 +++++++++++++++++++++++
> >   io/channel.c         | 101 ++++++++++++++++++++++++++++++++++---------
> >   2 files changed, 134 insertions(+), 20 deletions(-)
> 
> [...]
> 
> > diff --git a/io/channel.c b/io/channel.c
> > index 0d4b8b5160..4555021b62 100644
> > --- a/io/channel.c
> > +++ b/io/channel.c
> 
> [...]
> 
> > @@ -135,20 +193,23 @@ int qio_channel_readv_all_eof(QIOChannel *ioc,
> >       return ret;
> >   }
> > -int qio_channel_readv_all(QIOChannel *ioc,
> > -                          const struct iovec *iov,
> > -                          size_t niov,
> > -                          Error **errp)
> > +int qio_channel_readv_full_all(QIOChannel *ioc,
> > +                               const struct iovec *iov,
> > +                               size_t niov,
> > +                               int **fds, size_t *nfds,
> > +                               Error **errp)
> >   {
> > -    int ret = qio_channel_readv_all_eof(ioc, iov, niov, errp);
> > +    int ret = qio_channel_readv_full_all_eof(ioc, iov, niov, fds, nfds, 
> > errp);
> >       if (ret == 0) {
> > -        ret = -1;
> > -        error_setg(errp,
> > -                   "Unexpected end-of-file before all bytes were read");
> > -    } else if (ret == 1) {
> > -        ret = 0;
> > +        error_prepend(errp,
> > +                      "Unexpected end-of-file before all data were read.");
> > +        return -1;
> 
> This change breaks iotest 083 (i.e., it segfaults), because
> qio_channel_readv_full_all_eof() doesn’t set *errp when it returns 0, so
> there is no error to prepend.

Opps, yes, this needs to be error_setg() not error_prepend()


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Reply via email to