[Spice-devel] [PATCH spice-server v8 11/12] fixup! Convert RedChannel hierarchy to GObject

Frediano Ziglio fziglio at redhat.com
Mon Oct 24 08:40:54 UTC 2016


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);
 
-- 
2.7.4



More information about the Spice-devel mailing list