mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-01-11 08:07:16 +00:00
Make disconnect a virtual function
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
This commit is contained in:
parent
70367fd460
commit
d5ea93d3a8
@ -43,6 +43,7 @@ public:
|
||||
SpiceImageCompression image_compression,
|
||||
spice_wan_compression_t jpeg_state,
|
||||
spice_wan_compression_t zlib_glz_state);
|
||||
virtual void disconnect() override;
|
||||
|
||||
protected:
|
||||
virtual bool handle_message(uint16_t type, uint32_t size, void *message) override;
|
||||
|
||||
@ -26,7 +26,6 @@ G_DEFINE_TYPE(DisplayChannel, display_channel, TYPE_COMMON_GRAPHICS_CHANNEL)
|
||||
static void display_channel_connect(RedChannel *channel, RedClient *client,
|
||||
RedStream *stream, int migration,
|
||||
RedChannelCapabilities *caps);
|
||||
static void display_channel_disconnect(RedChannelClient *rcc);
|
||||
|
||||
enum {
|
||||
PROP0,
|
||||
@ -2504,7 +2503,6 @@ display_channel_class_init(DisplayChannelClass *klass)
|
||||
|
||||
// client callbacks
|
||||
channel_class->connect = display_channel_connect;
|
||||
channel_class->disconnect = display_channel_disconnect;
|
||||
|
||||
g_object_class_install_property(object_class,
|
||||
PROP_N_SURFACES,
|
||||
@ -2616,13 +2614,13 @@ display_channel_connect(RedChannel *channel, RedClient *client,
|
||||
dcc_start(dcc);
|
||||
}
|
||||
|
||||
static void display_channel_disconnect(RedChannelClient *rcc)
|
||||
void DisplayChannelClient::disconnect()
|
||||
{
|
||||
DisplayChannel *display = DISPLAY_CHANNEL(rcc->get_channel());
|
||||
DisplayChannel *display = DISPLAY_CHANNEL(get_channel());
|
||||
|
||||
guest_set_client_capabilities(display);
|
||||
|
||||
rcc->disconnect();
|
||||
RedChannelClient::disconnect();
|
||||
}
|
||||
|
||||
void DisplayChannelClient::migrate()
|
||||
|
||||
@ -115,7 +115,7 @@ public:
|
||||
void push();
|
||||
void receive();
|
||||
void send();
|
||||
void disconnect();
|
||||
virtual void disconnect();
|
||||
|
||||
/* Note: the valid times to call red_channel_get_marshaller are just during send_item callback. */
|
||||
SpiceMarshaller *get_marshaller();
|
||||
|
||||
@ -216,11 +216,6 @@ static void red_channel_client_default_connect(RedChannel *channel, RedClient *c
|
||||
spice_error("not implemented");
|
||||
}
|
||||
|
||||
static void red_channel_client_default_disconnect(RedChannelClient *base)
|
||||
{
|
||||
base->disconnect();
|
||||
}
|
||||
|
||||
static void
|
||||
red_channel_class_init(RedChannelClass *klass)
|
||||
{
|
||||
@ -300,7 +295,6 @@ red_channel_class_init(RedChannelClass *klass)
|
||||
g_object_class_install_property(object_class, PROP_DISPATCHER, spec);
|
||||
|
||||
klass->connect = red_channel_client_default_connect;
|
||||
klass->disconnect = red_channel_client_default_disconnect;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -732,18 +726,15 @@ typedef struct RedMessageDisconnect {
|
||||
static void handle_dispatcher_disconnect(void *opaque, void *payload)
|
||||
{
|
||||
RedMessageDisconnect *msg = (RedMessageDisconnect*) payload;
|
||||
RedChannel *channel = msg->rcc->get_channel();
|
||||
RedChannelClass *klass = RED_CHANNEL_GET_CLASS(channel);
|
||||
|
||||
klass->disconnect(msg->rcc);
|
||||
msg->rcc->disconnect();
|
||||
}
|
||||
|
||||
void RedChannel::disconnect_client(RedChannelClient *rcc)
|
||||
{
|
||||
if (priv->dispatcher == NULL ||
|
||||
pthread_equal(pthread_self(), priv->thread_id)) {
|
||||
RedChannelClass *klass = RED_CHANNEL_GET_CLASS(this);
|
||||
klass->disconnect(rcc);
|
||||
rcc->disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -50,7 +50,6 @@ typedef uint64_t (*channel_handle_migrate_data_get_serial_proc)(RedChannelClient
|
||||
|
||||
typedef void (*channel_client_connect_proc)(RedChannel *channel, RedClient *client, RedStream *stream,
|
||||
int migration, RedChannelCapabilities *caps);
|
||||
typedef void (*channel_client_disconnect_proc)(RedChannelClient *base);
|
||||
|
||||
|
||||
static inline gboolean test_capability(const uint32_t *caps, int num_caps, uint32_t cap)
|
||||
@ -78,7 +77,6 @@ struct RedChannelClass
|
||||
* They should be called from the thread that handles the RedClient
|
||||
*/
|
||||
channel_client_connect_proc connect;
|
||||
channel_client_disconnect_proc disconnect;
|
||||
};
|
||||
|
||||
#define FOREACH_CLIENT(_channel, _data) \
|
||||
|
||||
Loading…
Reference in New Issue
Block a user