* Peter Xu (pet...@redhat.com) wrote: > There're plenty of places in migration/* that checks against either socket or > tls typed ioc for yank operations. Provide two helpers to hide all these > information. > > Signed-off-by: Peter Xu <pet...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/channel.c | 15 ++------------- > migration/multifd.c | 8 ++------ > migration/qemu-file-channel.c | 8 ++------ > migration/yank_functions.c | 28 ++++++++++++++++++++++++++++ > migration/yank_functions.h | 2 ++ > 5 files changed, 36 insertions(+), 25 deletions(-) > > diff --git a/migration/channel.c b/migration/channel.c > index 01275a9162..c4fc000a1a 100644 > --- a/migration/channel.c > +++ b/migration/channel.c > @@ -44,13 +44,7 @@ void migration_channel_process_incoming(QIOChannel *ioc) > TYPE_QIO_CHANNEL_TLS)) { > migration_tls_channel_process_incoming(s, ioc, &local_err); > } else { > - if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) || > - object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_TLS)) { > - yank_register_function(MIGRATION_YANK_INSTANCE, > - migration_yank_iochannel, > - QIO_CHANNEL(ioc)); > - } > - > + migration_ioc_register_yank(ioc); > migration_ioc_process_incoming(ioc, &local_err); > } > > @@ -94,12 +88,7 @@ void migration_channel_connect(MigrationState *s, > } else { > QEMUFile *f = qemu_fopen_channel_output(ioc); > > - if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) || > - object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_TLS)) { > - yank_register_function(MIGRATION_YANK_INSTANCE, > - migration_yank_iochannel, > - QIO_CHANNEL(ioc)); > - } > + migration_ioc_register_yank(ioc); > > qemu_mutex_lock(&s->qemu_file_lock); > s->to_dst_file = f; > diff --git a/migration/multifd.c b/migration/multifd.c > index ab41590e71..377da78f5b 100644 > --- a/migration/multifd.c > +++ b/migration/multifd.c > @@ -987,12 +987,8 @@ int multifd_load_cleanup(Error **errp) > for (i = 0; i < migrate_multifd_channels(); i++) { > MultiFDRecvParams *p = &multifd_recv_state->params[i]; > > - if ((object_dynamic_cast(OBJECT(p->c), TYPE_QIO_CHANNEL_SOCKET) || > - object_dynamic_cast(OBJECT(p->c), TYPE_QIO_CHANNEL_TLS)) > - && OBJECT(p->c)->ref == 1) { > - yank_unregister_function(MIGRATION_YANK_INSTANCE, > - migration_yank_iochannel, > - QIO_CHANNEL(p->c)); > + if (OBJECT(p->c)->ref == 1) { > + migration_ioc_unregister_yank(p->c); > } > > object_unref(OBJECT(p->c)); > diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c > index fad340ea7a..867a5ed0c3 100644 > --- a/migration/qemu-file-channel.c > +++ b/migration/qemu-file-channel.c > @@ -107,12 +107,8 @@ static int channel_close(void *opaque, Error **errp) > int ret; > QIOChannel *ioc = QIO_CHANNEL(opaque); > ret = qio_channel_close(ioc, errp); > - if ((object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) || > - object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_TLS)) > - && OBJECT(ioc)->ref == 1) { > - yank_unregister_function(MIGRATION_YANK_INSTANCE, > - migration_yank_iochannel, > - QIO_CHANNEL(ioc)); > + if (OBJECT(ioc)->ref == 1) { > + migration_ioc_unregister_yank(ioc); > } > object_unref(OBJECT(ioc)); > return ret; > diff --git a/migration/yank_functions.c b/migration/yank_functions.c > index 96c90e17dc..23697173ae 100644 > --- a/migration/yank_functions.c > +++ b/migration/yank_functions.c > @@ -11,6 +11,9 @@ > #include "qapi/error.h" > #include "io/channel.h" > #include "yank_functions.h" > +#include "qemu/yank.h" > +#include "io/channel-socket.h" > +#include "io/channel-tls.h" > > void migration_yank_iochannel(void *opaque) > { > @@ -18,3 +21,28 @@ void migration_yank_iochannel(void *opaque) > > qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); > } > + > +/* Return whether yank is supported on this ioc */ > +static bool migration_ioc_yank_supported(QIOChannel *ioc) > +{ > + return object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) || > + object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_TLS); > +} > + > +void migration_ioc_register_yank(QIOChannel *ioc) > +{ > + if (migration_ioc_yank_supported(ioc)) { > + yank_register_function(MIGRATION_YANK_INSTANCE, > + migration_yank_iochannel, > + QIO_CHANNEL(ioc)); > + } > +} > + > +void migration_ioc_unregister_yank(QIOChannel *ioc) > +{ > + if (migration_ioc_yank_supported(ioc)) { > + yank_unregister_function(MIGRATION_YANK_INSTANCE, > + migration_yank_iochannel, > + QIO_CHANNEL(ioc)); > + } > +} > diff --git a/migration/yank_functions.h b/migration/yank_functions.h > index 055ea22523..74c7f18c91 100644 > --- a/migration/yank_functions.h > +++ b/migration/yank_functions.h > @@ -15,3 +15,5 @@ > * @opaque: QIOChannel to shutdown > */ > void migration_yank_iochannel(void *opaque); > +void migration_ioc_register_yank(QIOChannel *ioc); > +void migration_ioc_unregister_yank(QIOChannel *ioc); > -- > 2.31.1 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK