On Thu, Jun 17, 2021 at 09:32:02PM +0300, Vladimir Sementsov-Ogievskiy wrote: > Logic is wrong and uninitialized use of ioc really possible, as Peter (and > clang) reports. > > So, I propose the following squash-in. It doesn't conflict with following > patches. > > squash-in: > > diff --git a/nbd/client-connection.c b/nbd/client-connection.c > index 500b8591e8..396d7f17f0 100644 > --- a/nbd/client-connection.c > +++ b/nbd/client-connection.c > @@ -275,7 +275,6 @@ QIOChannel *coroutine_fn > nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, > Error **errp) > { > - QIOChannel *ioc; > QemuThread thread; > if (conn->do_negotiation) { > @@ -293,17 +292,19 @@ nbd_co_establish_connection(NBDClientConnection *conn, > NBDExportInfo *info, > if (conn->sioc) { > /* Previous attempt finally succeeded in background */ > if (conn->do_negotiation) { > - ioc = g_steal_pointer(&conn->ioc); > memcpy(info, &conn->updated_info, sizeof(*info)); > + if (conn->ioc) { > + /* TLS channel now has own reference to parent */ > + object_unref(OBJECT(conn->sioc)); > + conn->sioc = NULL; > + > + return g_steal_pointer(&conn->ioc); > + } > } > - if (ioc) { > - /* TLS channel now has own reference to parent */ > - object_unref(OBJECT(conn->sioc)); > - } else { > - ioc = QIO_CHANNEL(conn->sioc); > - } > - conn->sioc = NULL; > - return ioc; > + > + assert(!conn->ioc); > + > + return QIO_CHANNEL(g_steal_pointer(&conn->sioc));
Reviewed-by: Eric Blake <ebl...@redhat.com> I'll squash this in and send v2 of the pull request -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org