[Spice-devel] [PATCH spice-server v8 11/12] fixup! Convert RedChannel hierarchy to GObject
Jonathon Jongsma
jjongsma at redhat.com
Tue Oct 25 17:04:31 UTC 2016
This change introduced a regression, but unfortunately I didn't catch
it before pushing. the DummyChannel class did not implement these
vfuncs, but it wasn't a previously a problem since they were never
called. Now we assert on initialization. Will send a fix for it soon.
On Mon, 2016-10-24 at 09:40 +0100, Frediano Ziglio wrote:
> Move virtual method check back to initialisation.
> Moving to method itself and just giving warning and
> returning cause different regression from design prospective
> and security.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> server/red-channel.c | 19 ++++++-------------
> server/red-channel.h | 2 --
> 2 files changed, 6 insertions(+), 15 deletions(-)
>
> diff --git a/server/red-channel.c b/server/red-channel.c
> index bff7841..36ce44f 100644
> --- a/server/red-channel.c
> +++ b/server/red-channel.c
> @@ -225,6 +225,12 @@ red_channel_constructed(GObject *object)
> self->priv->type, self->priv->id, self->priv-
> >thread_id);
>
> RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self);
> +
> + spice_assert(klass->config_socket && klass->on_disconnect &&
> + klass->alloc_recv_buf && klass->release_recv_buf);
> + spice_assert(klass->handle_migrate_data ||
> + !(self->priv->migration_flags &
> SPICE_MIGRATE_NEED_DATA_TRANSFER));
> +
> self->priv->incoming_cb.alloc_msg_buf =
> (alloc_msg_recv_buf_proc)klass->alloc_recv_buf;
> self->priv->incoming_cb.release_msg_buf =
> @@ -993,7 +999,6 @@ SpiceCoreInterfaceInternal*
> red_channel_get_core_interface(RedChannel *channel)
> int red_channel_config_socket(RedChannel *self, RedChannelClient
> *rcc)
> {
> RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self);
> - g_return_val_if_fail(klass->config_socket, FALSE);
>
> return klass->config_socket(rcc);
> }
> @@ -1001,7 +1006,6 @@ int red_channel_config_socket(RedChannel *self,
> RedChannelClient *rcc)
> void red_channel_on_disconnect(RedChannel *self, RedChannelClient
> *rcc)
> {
> RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self);
> - g_return_if_fail(klass->on_disconnect);
>
> klass->on_disconnect(rcc);
> }
> @@ -1018,7 +1022,6 @@ uint8_t* red_channel_alloc_recv_buf(RedChannel
> *self, RedChannelClient *rcc,
> uint16_t type, uint32_t size)
> {
> RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self);
> - g_return_val_if_fail(klass->alloc_recv_buf, NULL);
>
> return klass->alloc_recv_buf(rcc, type, size);
> }
> @@ -1027,7 +1030,6 @@ void red_channel_release_recv_buf(RedChannel
> *self, RedChannelClient *rcc,
> uint16_t type, uint32_t size,
> uint8_t *msg)
> {
> RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self);
> - g_return_if_fail(klass->release_recv_buf);
>
> klass->release_recv_buf(rcc, type, size, msg);
> }
> @@ -1040,15 +1042,6 @@ int
> red_channel_handle_migrate_flush_mark(RedChannel *self,
> RedChannelClient *rc
> return klass->handle_migrate_flush_mark(rcc);
> }
>
> -int red_channel_handle_migrate_data(RedChannel *self,
> RedChannelClient *rcc,
> - uint32_t size, void *message)
> -{
> - RedChannelClass *klass = RED_CHANNEL_GET_CLASS(self);
> - g_return_val_if_fail(klass->handle_migrate_data, FALSE);
> -
> - return klass->handle_migrate_data(rcc, size, message);
> -}
> -
> IncomingHandlerInterface*
> red_channel_get_incoming_handler(RedChannel *self)
> {
> return &self->priv->incoming_cb;
> diff --git a/server/red-channel.h b/server/red-channel.h
> index 0bba15b..f99a03f 100644
> --- a/server/red-channel.h
> +++ b/server/red-channel.h
> @@ -321,8 +321,6 @@ uint8_t* red_channel_alloc_recv_buf(RedChannel
> *self, RedChannelClient *rcc,
> void red_channel_release_recv_buf(RedChannel *self, RedChannelClient
> *rcc,
> uint16_t type, uint32_t size,
> uint8_t *msg);
> int red_channel_handle_migrate_flush_mark(RedChannel *self,
> RedChannelClient *rcc);
> -int red_channel_handle_migrate_data(RedChannel *self,
> RedChannelClient *rcc,
> - uint32_t size, void *message);
> void red_channel_reset_thread_id(RedChannel *self);
> StatNodeRef red_channel_get_stat_node(RedChannel *channel);
>
More information about the Spice-devel
mailing list