Instead of using list in RedDispatcher (which is going to be removed) use the one in RedsState. Signed-off-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/red-dispatcher.c | 48 ++++++++++++++++++++---------------------------- server/red-dispatcher.h | 5 +++-- server/reds.c | 30 ++++++++++++++++++++++++++++-- 3 files changed, 51 insertions(+), 32 deletions(-) diff --git a/server/red-dispatcher.c b/server/red-dispatcher.c index 68423a1..7d755c1 100644 --- a/server/red-dispatcher.c +++ b/server/red-dispatcher.c @@ -682,35 +682,9 @@ static void qxl_worker_loadvm_commands(QXLWorker *qxl_worker, red_dispatcher_loadvm_commands((RedDispatcher*)qxl_worker, ext, count); } -void red_dispatcher_on_ic_change(void) +void red_dispatcher_set_compression_level(RedDispatcher *dispatcher, int level) { - RedWorkerMessageSetCompression payload; - int compression_level = calc_compression_level(reds); - RedDispatcher *now = dispatchers; - - while (now) { - now->qxl->st->qif->set_compression_level(now->qxl, compression_level); - payload.image_compression = spice_server_get_image_compression(reds); - dispatcher_send_message(&now->dispatcher, - RED_WORKER_MESSAGE_SET_COMPRESSION, - &payload); - now = now->next; - } -} - -void red_dispatcher_on_sv_change(void) -{ - RedWorkerMessageSetStreamingVideo payload; - int compression_level = calc_compression_level(reds); - RedDispatcher *now = dispatchers; - while (now) { - now->qxl->st->qif->set_compression_level(now->qxl, compression_level); - payload.streaming_video = reds_get_streaming_video(reds); - dispatcher_send_message(&now->dispatcher, - RED_WORKER_MESSAGE_SET_STREAMING_VIDEO, - &payload); - now = now->next; - } + dispatcher->qxl->st->qif->set_compression_level(dispatcher->qxl, level); } void red_dispatcher_on_vm_stop(void) @@ -1089,6 +1063,24 @@ void red_dispatcher_clear_pending(RedDispatcher *red_dispatcher, int pending) clear_bit(pending, &red_dispatcher->pending); } +void red_dispatcher_on_ic_change(RedDispatcher *dispatcher, SpiceImageCompression ic) +{ + RedWorkerMessageSetCompression payload; + payload.image_compression = ic; + dispatcher_send_message(&dispatcher->dispatcher, + RED_WORKER_MESSAGE_SET_COMPRESSION, + &payload); +} + +void red_dispatcher_on_sv_change(RedDispatcher *dispatcher, int sv) +{ + RedWorkerMessageSetStreamingVideo payload; + payload.streaming_video = sv; + dispatcher_send_message(&dispatcher->dispatcher, + RED_WORKER_MESSAGE_SET_STREAMING_VIDEO, + &payload); +} + void red_dispatcher_set_mouse_mode(RedDispatcher *dispatcher, uint32_t mode) { RedWorkerMessageSetMouseMode payload; diff --git a/server/red-dispatcher.h b/server/red-dispatcher.h index 1c0c218..bfb74fe 100644 --- a/server/red-dispatcher.h +++ b/server/red-dispatcher.h @@ -26,9 +26,10 @@ typedef struct AsyncCommand AsyncCommand; void red_dispatcher_init(QXLInstance *qxl); -void red_dispatcher_on_ic_change(void); -void red_dispatcher_on_sv_change(void); +void red_dispatcher_on_ic_change(RedDispatcher *dispatcher, SpiceImageCompression ic); +void red_dispatcher_on_sv_change(RedDispatcher *dispatcher, int sv); void red_dispatcher_set_mouse_mode(RedDispatcher *dispatcher, uint32_t mode); +void red_dispatcher_set_compression_level(RedDispatcher *dispatcher, int level); void red_dispatcher_on_vm_stop(void); void red_dispatcher_on_vm_start(void); int red_dispatcher_count(void); diff --git a/server/reds.c b/server/reds.c index 3882477..0f8f69a 100644 --- a/server/reds.c +++ b/server/reds.c @@ -172,6 +172,8 @@ static void reds_mig_remove_wait_disconnect_client(RedsState *reds, RedClient *c static void reds_char_device_add_state(RedsState *reds, SpiceCharDeviceState *st); static void reds_char_device_remove_state(RedsState *reds, SpiceCharDeviceState *st); static void reds_send_mm_time(RedsState *reds); +static void reds_on_ic_change(RedsState *reds); +static void reds_on_sv_change(RedsState *reds); static VDIReadBuf *vdi_port_state_get_read_buf(VDIPortState *state); static VDIReadBuf *vdi_port_read_buf_ref(VDIReadBuf *buf); @@ -2774,7 +2776,7 @@ static void reds_set_image_compression(RedsState *reds, SpiceImageCompression va return; } reds->image_compression = val; - red_dispatcher_on_ic_change(); + reds_on_ic_change(reds); } static void reds_set_one_channel_security(RedsState *reds, int id, uint32_t security) @@ -3797,7 +3799,7 @@ SPICE_GNUC_VISIBLE int spice_server_set_streaming_video(SpiceServer *s, int valu value != SPICE_STREAM_VIDEO_FILTER) return -1; s->streaming_video = value; - red_dispatcher_on_sv_change(); + reds_on_sv_change(reds); return 0; } @@ -4061,3 +4063,27 @@ int calc_compression_level(RedsState *reds) return 1; } } + +void reds_on_ic_change(RedsState *reds) +{ + int compression_level = calc_compression_level(reds); + GList *l; + + for (l = reds->dispatchers; l != NULL; l = l->next) { + RedDispatcher *d = l->data; + red_dispatcher_set_compression_level(d, compression_level); + red_dispatcher_on_ic_change(d, spice_server_get_image_compression(reds)); + } +} + +void reds_on_sv_change(RedsState *reds) +{ + int compression_level = calc_compression_level(reds); + GList *l; + + for (l = reds->dispatchers; l != NULL; l = l->next) { + RedDispatcher *d = l->data; + red_dispatcher_set_compression_level(d, compression_level); + red_dispatcher_on_sv_change(d, reds_get_streaming_video(reds)); + } +} -- 2.5.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel