It's always called at the same time as red_channel_register_client_cbs() and the data is used by the callbacks, so we can pass the data as an argument to red_channel_register_client_cbs(). --- server/inputs-channel.c | 2 +- server/main-channel.c | 2 +- server/red-channel.c | 13 ++++--------- server/red-channel.h | 3 +-- server/red-qxl.c | 6 ++---- server/smartcard.c | 2 +- server/sound.c | 6 ++---- server/spicevmc.c | 2 +- 8 files changed, 13 insertions(+), 23 deletions(-) diff --git a/server/inputs-channel.c b/server/inputs-channel.c index ca8166d..45e0a8f 100644 --- a/server/inputs-channel.c +++ b/server/inputs-channel.c @@ -650,7 +650,7 @@ InputsChannel* inputs_channel_new(RedsState *reds) client_cbs.connect = inputs_connect; client_cbs.migrate = inputs_migrate; - red_channel_register_client_cbs(&inputs->base, &client_cbs); + red_channel_register_client_cbs(&inputs->base, &client_cbs, NULL); red_channel_set_cap(&inputs->base, SPICE_INPUTS_CAP_KEY_SCANCODE); reds_register_channel(reds, &inputs->base); diff --git a/server/main-channel.c b/server/main-channel.c index 9901135..a9d0ce1 100644 --- a/server/main-channel.c +++ b/server/main-channel.c @@ -1184,7 +1184,7 @@ MainChannel* main_channel_new(RedsState *reds) red_channel_set_cap(channel, SPICE_MAIN_CAP_SEAMLESS_MIGRATE); client_cbs.migrate = main_channel_client_migrate; - red_channel_register_client_cbs(channel, &client_cbs); + red_channel_register_client_cbs(channel, &client_cbs, NULL); return (MainChannel *)channel; } diff --git a/server/red-channel.c b/server/red-channel.c index 3909c63..d8f1d27 100644 --- a/server/red-channel.c +++ b/server/red-channel.c @@ -1064,7 +1064,7 @@ RedChannel *red_channel_create(int size, client_cbs.disconnect = red_channel_client_default_disconnect; client_cbs.migrate = red_channel_client_default_migrate; - red_channel_register_client_cbs(channel, &client_cbs); + red_channel_register_client_cbs(channel, &client_cbs, NULL); red_channel_set_common_cap(channel, SPICE_COMMON_CAP_MINI_HEADER); channel->thread_id = pthread_self(); @@ -1115,7 +1115,7 @@ RedChannel *red_channel_create_dummy(int size, RedsState *reds, uint32_t type, u client_cbs.disconnect = red_channel_client_default_disconnect; client_cbs.migrate = red_channel_client_default_migrate; - red_channel_register_client_cbs(channel, &client_cbs); + red_channel_register_client_cbs(channel, &client_cbs, NULL); red_channel_set_common_cap(channel, SPICE_COMMON_CAP_MINI_HEADER); channel->thread_id = pthread_self(); @@ -1171,7 +1171,7 @@ void red_channel_set_stat_node(RedChannel *channel, StatNodeRef stat) #endif } -void red_channel_register_client_cbs(RedChannel *channel, const ClientCbs *client_cbs) +void red_channel_register_client_cbs(RedChannel *channel, const ClientCbs *client_cbs, gpointer cbs_data) { spice_assert(client_cbs->connect || channel->type == SPICE_CHANNEL_MAIN); channel->client_cbs.connect = client_cbs->connect; @@ -1183,6 +1183,7 @@ void red_channel_register_client_cbs(RedChannel *channel, const ClientCbs *clien if (client_cbs->migrate) { channel->client_cbs.migrate = client_cbs->migrate; } + channel->data = cbs_data; } int test_capability(const uint32_t *caps, int num_caps, uint32_t cap) @@ -1217,12 +1218,6 @@ void red_channel_set_cap(RedChannel *channel, uint32_t cap) add_capability(&channel->local_caps.caps, &channel->local_caps.num_caps, cap); } -void red_channel_set_data(RedChannel *channel, void *data) -{ - spice_assert(channel); - channel->data = data; -} - static void red_channel_ref(RedChannel *channel) { channel->refs++; diff --git a/server/red-channel.h b/server/red-channel.h index 7c1c95d..26304bf 100644 --- a/server/red-channel.h +++ b/server/red-channel.h @@ -383,11 +383,10 @@ RedChannel *red_channel_create_parser(int size, uint32_t migration_flags); void red_channel_set_stat_node(RedChannel *channel, StatNodeRef stat); -void red_channel_register_client_cbs(RedChannel *channel, const ClientCbs *client_cbs); +void red_channel_register_client_cbs(RedChannel *channel, const ClientCbs *client_cbs, gpointer cbs_data); // caps are freed when the channel is destroyed void red_channel_set_common_cap(RedChannel *channel, uint32_t cap); void red_channel_set_cap(RedChannel *channel, uint32_t cap); -void red_channel_set_data(RedChannel *channel, void *data); RedChannelClient *red_channel_client_create(int size, RedChannel *channel, RedClient *client, RedsStream *stream, diff --git a/server/red-qxl.c b/server/red-qxl.c index 491046f..ee3cab0 100644 --- a/server/red-qxl.c +++ b/server/red-qxl.c @@ -985,16 +985,14 @@ void red_qxl_init(RedsState *reds, QXLInstance *qxl) client_cbs.connect = red_qxl_set_cursor_peer; client_cbs.disconnect = red_qxl_disconnect_cursor_peer; client_cbs.migrate = red_qxl_cursor_migrate; - red_channel_register_client_cbs(channel, &client_cbs); - red_channel_set_data(channel, qxl_state); + red_channel_register_client_cbs(channel, &client_cbs, qxl_state); reds_register_channel(reds, channel); channel = red_worker_get_display_channel(worker); client_cbs.connect = red_qxl_set_display_peer; client_cbs.disconnect = red_qxl_disconnect_display_peer; client_cbs.migrate = red_qxl_display_migrate; - red_channel_register_client_cbs(channel, &client_cbs); - red_channel_set_data(channel, qxl_state); + red_channel_register_client_cbs(channel, &client_cbs, qxl_state); red_channel_set_cap(channel, SPICE_DISPLAY_CAP_MONITORS_CONFIG); red_channel_set_cap(channel, SPICE_DISPLAY_CAP_PREF_COMPRESSION); red_channel_set_cap(channel, SPICE_DISPLAY_CAP_STREAM_REPORT); diff --git a/server/smartcard.c b/server/smartcard.c index 55382e2..2b25bac 100644 --- a/server/smartcard.c +++ b/server/smartcard.c @@ -863,7 +863,7 @@ static void smartcard_init(void) } client_cbs.connect = smartcard_connect_client; - red_channel_register_client_cbs(&g_smartcard_channel->base, &client_cbs); + red_channel_register_client_cbs(&g_smartcard_channel->base, &client_cbs, NULL); reds_register_channel(reds, &g_smartcard_channel->base); } diff --git a/server/sound.c b/server/sound.c index 1aa3a74..82c14f7 100644 --- a/server/sound.c +++ b/server/sound.c @@ -1534,8 +1534,7 @@ void snd_attach_playback(RedsState *reds, SpicePlaybackInstance *sin) client_cbs.connect = snd_set_playback_peer; client_cbs.disconnect = snd_disconnect_channel_client; client_cbs.migrate = snd_playback_migrate_channel_client; - red_channel_register_client_cbs(channel, &client_cbs); - red_channel_set_data(channel, playback_worker); + red_channel_register_client_cbs(channel, &client_cbs, playback_worker); if (snd_codec_is_capable(SPICE_AUDIO_DATA_MODE_CELT_0_5_1, SND_CODEC_ANY_FREQUENCY)) red_channel_set_cap(channel, SPICE_PLAYBACK_CAP_CELT_0_5_1); @@ -1564,8 +1563,7 @@ void snd_attach_record(RedsState *reds, SpiceRecordInstance *sin) client_cbs.connect = snd_set_record_peer; client_cbs.disconnect = snd_disconnect_channel_client; client_cbs.migrate = snd_record_migrate_channel_client; - red_channel_register_client_cbs(channel, &client_cbs); - red_channel_set_data(channel, record_worker); + red_channel_register_client_cbs(channel, &client_cbs, record_worker); if (snd_codec_is_capable(SPICE_AUDIO_DATA_MODE_CELT_0_5_1, SND_CODEC_ANY_FREQUENCY)) red_channel_set_cap(channel, SPICE_RECORD_CAP_CELT_0_5_1); red_channel_set_cap(channel, SPICE_RECORD_CAP_VOLUME); diff --git a/server/spicevmc.c b/server/spicevmc.c index 1050fde..f745fdb 100644 --- a/server/spicevmc.c +++ b/server/spicevmc.c @@ -528,7 +528,7 @@ SpiceCharDeviceState *spicevmc_device_connect(RedsState *reds, red_channel_init_outgoing_messages_window(&state->channel); client_cbs.connect = spicevmc_connect; - red_channel_register_client_cbs(&state->channel, &client_cbs); + red_channel_register_client_cbs(&state->channel, &client_cbs, NULL); char_dev_cbs.read_one_msg_from_device = spicevmc_chardev_read_msg_from_dev; char_dev_cbs.ref_msg_to_client = spicevmc_chardev_ref_msg_to_client; -- 2.5.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel