diff --git a/server/display-channel.c b/server/display-channel.c index 80656760..ff9aeac6 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -2025,7 +2025,8 @@ static SpiceCanvas *image_surfaces_get(SpiceImageSurfaces *surfaces, uint32_t su return display->surfaces[surface_id].context.canvas; } -DisplayChannel* display_channel_new(RedWorker *worker, int migrate, int stream_video, +DisplayChannel* display_channel_new(SpiceServer *reds, RedWorker *worker, + int migrate, int stream_video, uint32_t n_surfaces) { DisplayChannel *display; diff --git a/server/display-channel.h b/server/display-channel.h index 1bccd220..6b053de4 100644 --- a/server/display-channel.h +++ b/server/display-channel.h @@ -250,7 +250,8 @@ typedef struct UpgradeItem { } UpgradeItem; -DisplayChannel* display_channel_new (RedWorker *worker, +DisplayChannel* display_channel_new (SpiceServer *reds, + RedWorker *worker, int migrate, int stream_video, uint32_t n_surfaces); diff --git a/server/red-worker.c b/server/red-worker.c index 0eb385a9..0b61ec40 100644 --- a/server/red-worker.c +++ b/server/red-worker.c @@ -91,6 +91,8 @@ struct RedWorker { FILE *record_fd; }; +static RedsState* red_worker_get_server(RedWorker *worker); + static int display_is_connected(RedWorker *worker) { return (worker->display_channel && red_channel_is_connected( @@ -478,15 +480,16 @@ CommonGraphicsChannel *red_worker_new_channel(RedWorker *worker, int size, channel_cbs->alloc_recv_buf = common_alloc_recv_buf; channel_cbs->release_recv_buf = common_release_recv_buf; - channel = red_channel_create_parser(size, reds, &worker->core, - channel_type, worker->qxl->id, - TRUE /* handle_acks */, + channel = red_channel_create_parser(size, red_worker_get_server(worker), + &worker->core, channel_type, + worker->qxl->id, TRUE /* handle_acks */, spice_get_client_channel_parser(channel_type, NULL), handle_parsed, channel_cbs, migration_flags); spice_return_val_if_fail(channel, NULL); - red_channel_set_stat_node(channel, stat_add_node(reds, worker->stat, name, TRUE)); + red_channel_set_stat_node(channel, stat_add_node(red_worker_get_server(worker), + worker->stat, name, TRUE)); common = (CommonGraphicsChannel *)channel; common->qxl = worker->qxl; @@ -1468,6 +1471,7 @@ RedWorker* red_worker_new(QXLInstance *qxl) RedWorker *worker; Dispatcher *dispatcher; const char *record_filename; + RedsState *reds = red_qxl_get_server(qxl->st); qxl_get_interface(qxl)->get_init_info(qxl, &init_info); @@ -1531,7 +1535,7 @@ RedWorker* red_worker_new(QXLInstance *qxl) worker->cursor_channel = cursor_channel_new(worker); // TODO: handle seemless migration. Temp, setting migrate to FALSE - worker->display_channel = display_channel_new(worker, FALSE, reds_get_streaming_video(reds), + worker->display_channel = display_channel_new(reds, worker, FALSE, reds_get_streaming_video(reds), init_info.n_surfaces); return worker; @@ -1591,3 +1595,8 @@ RedChannel* red_worker_get_display_channel(RedWorker *worker) return RED_CHANNEL(worker->display_channel); } + +static RedsState* red_worker_get_server(RedWorker *worker) +{ + return red_qxl_get_server(worker->qxl->st); +}