[Spice-devel] [PATCH 09/18] server/red_worker: add red_channel_init_send_data
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Feb 8 13:01:29 PST 2011
ack
On Mon, Feb 7, 2011 at 7:19 PM, Alon Levy <alevy at redhat.com> wrote:
> Changes semantics of send to always hold/release regardless of block, like
> red_channel. A hold is just a reference count increment or nop.
> ---
> server/red_worker.c | 171 +++++++++++++++++++++++++--------------------------
> 1 files changed, 84 insertions(+), 87 deletions(-)
>
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 2e3dc16..393543a 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -976,8 +976,8 @@ static void red_display_release_stream(DisplayChannel *display, StreamAgent *age
> static inline void red_detach_stream(RedWorker *worker, Stream *stream);
> static void red_stop_stream(RedWorker *worker, Stream *stream);
> static inline void red_stream_maintenance(RedWorker *worker, Drawable *candidate, Drawable *sect);
> -static inline void red_begin_send_message(RedChannel *channel, void *item);
> -static inline void display_begin_send_message(DisplayChannel *channel, void *item);
> +static inline void red_begin_send_message(RedChannel *channel);
> +static inline void display_begin_send_message(DisplayChannel *channel);
> static void red_receive(RedChannel *channel);
> static void red_release_pixmap_cache(DisplayChannel *channel);
> static void red_release_glz(DisplayChannel *channel);
> @@ -1176,6 +1176,16 @@ static void show_draw_item(RedWorker *worker, DrawItem *draw_item, const char *p
> draw_item->base.rgn.extents.y2);
> }
>
> +static void red_channel_init_send_data(RedChannel *channel, uint16_t type, PipeItem *item)
> +{
> + if (item) {
> + channel->hold_item(item);
> + ASSERT(channel->send_data.item == NULL);
> + channel->send_data.item = item;
> + }
> + channel->send_data.header->type = type;
> +}
> +
> static inline void red_pipe_item_init(PipeItem *item, int type)
> {
> ring_item_init(&item->link);
> @@ -6449,9 +6459,8 @@ static void red_send_qxl_draw_fill(RedWorker *worker,
> SpiceMarshaller *mask_bitmap_out;
> SpiceFill fill;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_FILL, &item->pipe_item);
> fill_base(display_channel, item);
> -
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_FILL;
> fill = drawable->u.fill;
> spice_marshall_Fill(channel->send_data.marshaller,
> &fill,
> @@ -6498,7 +6507,7 @@ static void red_lossy_send_qxl_draw_fill(RedWorker *worker,
>
> red_send_qxl_draw_fill(worker, display_channel, item);
>
> - // eitehr the brush operation is opaque, or the dest is not lossy
> + // either the brush operation is opaque, or the dest is not lossy
> surface_lossy_region_update(worker, display_channel, item, has_mask, FALSE);
> } else {
> int resend_surface_ids[2];
> @@ -6534,9 +6543,8 @@ static FillBitsType red_send_qxl_draw_opaque(RedWorker *worker,
> SpiceOpaque opaque;
> FillBitsType src_send_type;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_OPAQUE, &item->pipe_item);
> fill_base(display_channel, item);
> -
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_OPAQUE;
> opaque = drawable->u.opaque;
> spice_marshall_Opaque(channel->send_data.marshaller,
> &opaque,
> @@ -6630,10 +6638,8 @@ static FillBitsType red_send_qxl_draw_copy(RedWorker *worker,
> SpiceCopy copy;
> FillBitsType src_send_type;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_COPY, &item->pipe_item);
> fill_base(display_channel, item);
> -
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_COPY;
> -
> copy = drawable->u.copy;
> spice_marshall_Copy(channel->send_data.marshaller,
> ©,
> @@ -6680,8 +6686,8 @@ static void red_send_qxl_draw_transparent(RedWorker *worker,
> SpiceMarshaller *src_bitmap_out;
> SpiceTransparent transparent;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_TRANSPARENT, &item->pipe_item);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_TRANSPARENT;
> transparent = drawable->u.transparent;
> spice_marshall_Transparent(channel->send_data.marshaller,
> &transparent,
> @@ -6727,8 +6733,8 @@ static FillBitsType red_send_qxl_draw_alpha_blend(RedWorker *worker,
> SpiceAlphaBlend alpha_blend;
> FillBitsType src_send_type;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND, &item->pipe_item);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND;
> alpha_blend = drawable->u.alpha_blend;
> spice_marshall_AlphaBlend(channel->send_data.marshaller,
> &alpha_blend,
> @@ -6771,8 +6777,8 @@ static void red_send_qxl_copy_bits(RedWorker *worker,
> RedDrawable *drawable = item->red_drawable;
> SpicePoint copy_bits;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_COPY_BITS, &item->pipe_item);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_COPY_BITS;
> copy_bits = drawable->u.copy_bits.src_pos;
> spice_marshall_Point(channel->send_data.marshaller,
> ©_bits);
> @@ -6816,8 +6822,8 @@ static void red_send_qxl_draw_blend(RedWorker *worker,
> SpiceMarshaller *mask_bitmap_out;
> SpiceBlend blend;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_BLEND, &item->pipe_item);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_BLEND;
> blend = drawable->u.blend;
> spice_marshall_Blend(channel->send_data.marshaller,
> &blend,
> @@ -6878,8 +6884,8 @@ static void red_send_qxl_draw_blackness(RedWorker *worker,
> SpiceMarshaller *mask_bitmap_out;
> SpiceBlackness blackness;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_BLACKNESS, &item->pipe_item);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_BLACKNESS;
> blackness = drawable->u.blackness;
>
> spice_marshall_Blackness(channel->send_data.marshaller,
> @@ -6910,8 +6916,8 @@ static void red_send_qxl_draw_whiteness(RedWorker *worker,
> SpiceMarshaller *mask_bitmap_out;
> SpiceWhiteness whiteness;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_WHITENESS, &item->pipe_item);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_WHITENESS;
> whiteness = drawable->u.whiteness;
>
> spice_marshall_Whiteness(channel->send_data.marshaller,
> @@ -6942,8 +6948,8 @@ static void red_send_qxl_draw_inverse(RedWorker *worker,
> RedChannel *channel = &display_channel->common.base;
> SpiceInvers inverse;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_INVERS, NULL);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_INVERS;
> inverse = drawable->u.invers;
>
> spice_marshall_Invers(channel->send_data.marshaller,
> @@ -6971,8 +6977,8 @@ static void red_send_qxl_draw_rop3(RedWorker *worker,
> SpiceMarshaller *brush_pat_out;
> SpiceMarshaller *mask_bitmap_out;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_ROP3, &item->pipe_item);
> fill_base(display_channel, item);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_ROP3;
> rop3 = drawable->u.rop3;
> spice_marshall_Rop3(channel->send_data.marshaller,
> &rop3,
> @@ -7052,9 +7058,8 @@ static void red_send_qxl_draw_stroke(RedWorker *worker,
> SpiceMarshaller *brush_pat_out;
> SpiceMarshaller *style_out;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_STROKE, &item->pipe_item);
> fill_base(display_channel, item);
> -
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_STROKE;
> stroke = drawable->u.stroke;
> spice_marshall_Stroke(channel->send_data.marshaller,
> &stroke,
> @@ -7131,9 +7136,8 @@ static void red_send_qxl_draw_text(RedWorker *worker,
> SpiceMarshaller *brush_pat_out;
> SpiceMarshaller *back_brush_pat_out;
>
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_TEXT, &item->pipe_item);
> fill_base(display_channel, item);
> -
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_TEXT;
> text = drawable->u.text;
> spice_marshall_Text(channel->send_data.marshaller,
> &text,
> @@ -7262,7 +7266,7 @@ static void red_lossy_send_qxl_drawable(RedWorker *worker, DisplayChannel *displ
>
> // a message is pending
> if (display_channel->common.base.send_data.header->type != 0) {
> - display_begin_send_message(display_channel, &item->pipe_item);
> + display_begin_send_message(display_channel);
> }
> }
>
> @@ -7314,7 +7318,7 @@ static inline void red_send_qxl_drawable(RedWorker *worker, DisplayChannel *disp
> default:
> red_error("invalid type");
> }
> - display_begin_send_message(display_channel, &item->pipe_item);
> + display_begin_send_message(display_channel);
> }
>
> #define MAX_SEND_VEC 100
> @@ -7328,7 +7332,7 @@ static void inline channel_release_res(RedChannel *channel)
> channel->send_data.item = NULL;
> }
>
> -static void red_send_data(RedChannel *channel, void *item)
> +static void red_send_data(RedChannel *channel)
> {
> for (;;) {
> uint32_t n = channel->send_data.size - channel->send_data.pos;
> @@ -7350,10 +7354,6 @@ static void red_send_data(RedChannel *channel, void *item)
> switch (errno) {
> case EAGAIN:
> channel->send_data.blocked = TRUE;
> - if (item) {
> - channel->hold_item(item);
> - channel->send_data.item = item;
> - }
> return;
> case EINTR:
> break;
> @@ -7396,17 +7396,17 @@ static void display_channel_push_release(DisplayChannel *channel, uint8_t type,
> free_list->res->resources[free_list->res->count++].id = id;
> }
>
> -static inline void red_begin_send_message(RedChannel *channel, void *item)
> +static inline void red_begin_send_message(RedChannel *channel)
> {
> spice_marshaller_flush(channel->send_data.marshaller);
> channel->send_data.size = spice_marshaller_get_total_size(channel->send_data.marshaller);
> channel->send_data.header->size = channel->send_data.size - sizeof(SpiceDataHeader);
> channel->ack_data.messages_window++;
> channel->send_data.header = NULL; /* avoid writing to this until we have a new message */
> - red_send_data(channel, item);
> + red_send_data(channel);
> }
>
> -static inline void display_begin_send_message(DisplayChannel *channel, void *item)
> +static inline void display_begin_send_message(DisplayChannel *channel)
> {
> FreeList *free_list = &channel->send_data.free_list;
>
> @@ -7453,7 +7453,7 @@ static inline void display_begin_send_message(DisplayChannel *channel, void *ite
> spice_marshaller_add_uint32(sub_list_m, spice_marshaller_get_offset(inval_m));
> channel->common.base.send_data.header->sub_list = spice_marshaller_get_offset(sub_list_m);
> }
> - red_begin_send_message((RedChannel *)channel, item);
> + red_begin_send_message((RedChannel *)channel);
> }
>
> static inline RedChannel *red_ref_channel(RedChannel *channel)
> @@ -7729,7 +7729,7 @@ static inline int red_send_stream_data(DisplayChannel *display_channel, Drawable
> red_display_share_stream_buf(display_channel);
> }
>
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_STREAM_DATA;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_STREAM_DATA, NULL);
>
> SpiceMsgDisplayStreamData stream_data;
>
> @@ -7740,7 +7740,7 @@ static inline int red_send_stream_data(DisplayChannel *display_channel, Drawable
> spice_marshaller_add_ref(channel->send_data.marshaller,
> display_channel->send_data.stream_outbuf, n);
>
> - display_begin_send_message(display_channel, NULL);
> + display_begin_send_message(display_channel);
> agent->lats_send_time = time_now;
> return TRUE;
> }
> @@ -7762,35 +7762,35 @@ static void red_send_set_ack(RedChannel *channel)
> SpiceMsgSetAck ack;
>
> ASSERT(channel);
> - channel->send_data.header->type = SPICE_MSG_SET_ACK;
> + red_channel_init_send_data(channel, SPICE_MSG_SET_ACK, NULL);
> ack.generation = ++channel->ack_data.generation;
> ack.window = channel->ack_data.client_window;
> channel->ack_data.messages_window = 0;
>
> spice_marshall_msg_set_ack(channel->send_data.marshaller, &ack);
>
> - red_begin_send_message(channel, NULL);
> + red_begin_send_message(channel);
> }
>
> static inline void red_send_verb(RedChannel *channel, uint16_t verb)
> {
> ASSERT(channel);
> - channel->send_data.header->type = verb;
> - red_begin_send_message(channel, NULL);
> + red_channel_init_send_data(channel, verb, NULL);
> + red_begin_send_message(channel);
> }
>
> static inline void display_send_verb(DisplayChannel *channel, uint16_t verb)
> {
> ASSERT(channel);
> - channel->common.base.send_data.header->type = verb;
> - display_begin_send_message(channel, NULL);
> + red_channel_init_send_data(&channel->common.base, verb, NULL);
> + display_begin_send_message(channel);
> }
>
> static inline void __red_send_inval(RedChannel *channel, CacheItem *cach_item)
> {
> SpiceMsgDisplayInvalOne inval_one;
>
> - channel->send_data.header->type = cach_item->inval_type;
> + red_channel_init_send_data(channel, cach_item->inval_type, NULL);
> inval_one.id = *(uint64_t *)&cach_item->id;
>
> spice_marshall_msg_cursor_inval_one(channel->send_data.marshaller, &inval_one);
> @@ -7799,31 +7799,31 @@ static inline void __red_send_inval(RedChannel *channel, CacheItem *cach_item)
> static void red_send_inval(RedChannel *channel, CacheItem *cach_item)
> {
> __red_send_inval(channel, cach_item);
> - red_begin_send_message(channel, NULL);
> + red_begin_send_message(channel);
> }
>
> static void red_display_send_inval(DisplayChannel *display_channel, CacheItem *cach_item)
> {
> __red_send_inval((RedChannel *)display_channel, cach_item);
> - display_begin_send_message(display_channel, NULL);
> + display_begin_send_message(display_channel);
> }
>
> static void display_channel_send_migrate(DisplayChannel *display_channel)
> {
> SpiceMsgMigrate migrate;
>
> - display_channel->common.base.send_data.header->type = SPICE_MSG_MIGRATE;
> + red_channel_init_send_data(&display_channel->common.base, SPICE_MSG_MIGRATE, NULL);
> migrate.flags = SPICE_MIGRATE_NEED_FLUSH | SPICE_MIGRATE_NEED_DATA_TRANSFER;
> spice_marshall_msg_migrate(display_channel->common.base.send_data.marshaller, &migrate);
> display_channel->expect_migrate_mark = TRUE;
> - display_begin_send_message(display_channel, NULL);
> + display_begin_send_message(display_channel);
> }
>
> static void display_channel_send_migrate_data(DisplayChannel *display_channel)
> {
> DisplayChannelMigrateData display_data;
>
> - display_channel->common.base.send_data.header->type = SPICE_MSG_MIGRATE_DATA;
> + red_channel_init_send_data(&display_channel->common.base, SPICE_MSG_MIGRATE_DATA, NULL);
>
> ASSERT(display_channel->pixmap_cache);
> display_data.magic = DISPLAY_MIGRATE_DATA_MAGIC;
> @@ -7847,7 +7847,7 @@ static void display_channel_send_migrate_data(DisplayChannel *display_channel)
>
> spice_marshaller_add_ref(display_channel->common.base.send_data.marshaller,
> (uint8_t *)&display_data, sizeof(display_data));
> - display_begin_send_message(display_channel, NULL);
> + display_begin_send_message(display_channel);
> }
>
> static void display_channel_pixmap_sync(DisplayChannel *display_channel)
> @@ -7856,7 +7856,7 @@ static void display_channel_pixmap_sync(DisplayChannel *display_channel)
> PixmapCache *pixmap_cache;
>
>
> - display_channel->common.base.send_data.header->type = SPICE_MSG_WAIT_FOR_CHANNELS;
> + red_channel_init_send_data(&display_channel->common.base, SPICE_MSG_WAIT_FOR_CHANNELS, NULL);
> pixmap_cache = display_channel->pixmap_cache;
>
>
> @@ -7873,19 +7873,19 @@ static void display_channel_pixmap_sync(DisplayChannel *display_channel)
>
> spice_marshall_msg_wait_for_channels(display_channel->common.base.send_data.marshaller, &wait);
>
> - display_begin_send_message(display_channel, NULL);
> + display_begin_send_message(display_channel);
> }
>
> static void display_channel_reset_cache(DisplayChannel *display_channel)
> {
> SpiceMsgWaitForChannels wait;
>
> - display_channel->common.base.send_data.header->type = SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS;
> + red_channel_init_send_data(&display_channel->common.base, SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS, NULL);
> pixmap_cache_reset(display_channel->pixmap_cache, display_channel, &wait);
>
> spice_marshall_msg_display_inval_all_pixmaps(display_channel->common.base.send_data.marshaller,
> &wait);
> - display_begin_send_message(display_channel, NULL);
> + display_begin_send_message(display_channel);
> }
>
> static void red_send_image(DisplayChannel *display_channel, ImageItem *item)
> @@ -7928,7 +7928,7 @@ static void red_send_image(DisplayChannel *display_channel, ImageItem *item)
> chunks = spice_chunks_new_linear(item->data, bitmap.stride * bitmap.y);
> bitmap.data = chunks;
>
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_COPY;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_COPY, &item->link);
>
> copy.base.surface_id = item->surface_id;
> copy.base.box.left = item->pos.x;
> @@ -8021,7 +8021,7 @@ static void red_send_image(DisplayChannel *display_channel, ImageItem *item)
> bitmap.y * bitmap.stride);
> region_remove(surface_lossy_region, ©.base.box);
> }
> - display_begin_send_message(display_channel, &item->link);
> + display_begin_send_message(display_channel);
>
> spice_chunks_destroy(chunks);
> }
> @@ -8036,7 +8036,7 @@ static void red_display_send_upgrade(DisplayChannel *display_channel, UpgradeIte
> ASSERT(display_channel && item && item->drawable);
> channel = &display_channel->common.base;
>
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_COPY;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_DRAW_COPY, &item->base);
>
> red_drawable = item->drawable->red_drawable;
> ASSERT(red_drawable->type == QXL_DRAW_COPY);
> @@ -8056,7 +8056,7 @@ static void red_display_send_upgrade(DisplayChannel *display_channel, UpgradeIte
>
> fill_bits(display_channel, src_bitmap_out, copy.data.src_bitmap, item->drawable, FALSE);
>
> - display_begin_send_message(display_channel, &item->base);
> + display_begin_send_message(display_channel);
> }
>
> static void red_display_send_stream_start(DisplayChannel *display_channel, StreamAgent *agent)
> @@ -8066,7 +8066,8 @@ static void red_display_send_stream_start(DisplayChannel *display_channel, Strea
>
> agent->lats_send_time = 0;
> ASSERT(stream);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_STREAM_CREATE;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_STREAM_CREATE,
> + stream->current ? &stream->current->pipe_item : NULL);
> SpiceMsgDisplayStreamCreate stream_create;
> SpiceClipRects clip_rects;
>
> @@ -8093,11 +8094,7 @@ static void red_display_send_stream_start(DisplayChannel *display_channel, Strea
> spice_marshall_msg_display_stream_create(channel->send_data.marshaller, &stream_create);
>
>
> - if (stream->current) {
> - display_begin_send_message(display_channel, &stream->current->pipe_item);
> - } else {
> - display_begin_send_message(display_channel, NULL);
> - }
> + display_begin_send_message(display_channel);
> }
>
> static void red_display_send_stream_clip(DisplayChannel *display_channel,
> @@ -8110,7 +8107,7 @@ static void red_display_send_stream_clip(DisplayChannel *display_channel,
>
> ASSERT(stream);
>
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_STREAM_CLIP;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_STREAM_CLIP, &item->base);
> SpiceMsgDisplayStreamClip stream_clip;
>
> stream_clip.id = agent - display_channel->stream_agents;
> @@ -8119,7 +8116,7 @@ static void red_display_send_stream_clip(DisplayChannel *display_channel,
>
> spice_marshall_msg_display_stream_clip(channel->send_data.marshaller, &stream_clip);
>
> - display_begin_send_message(display_channel, item);
> + display_begin_send_message(display_channel);
> }
>
> static void red_display_send_stream_end(DisplayChannel *display_channel, StreamAgent* agent)
> @@ -8127,12 +8124,12 @@ static void red_display_send_stream_end(DisplayChannel *display_channel, StreamA
> RedChannel *channel = &display_channel->common.base;
> SpiceMsgDisplayStreamDestroy destroy;
>
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_STREAM_DESTROY;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_STREAM_DESTROY, NULL);
> destroy.id = agent - display_channel->stream_agents;
>
> spice_marshall_msg_display_stream_destroy(channel->send_data.marshaller, &destroy);
>
> - display_begin_send_message(display_channel, NULL);
> + display_begin_send_message(display_channel);
> }
>
> static void red_cursor_send_inval(CursorChannel *channel, CacheItem *cach_item)
> @@ -8151,7 +8148,7 @@ static void red_send_cursor_init(CursorChannel *channel)
>
> worker = channel->common.worker;
>
> - channel->common.base.send_data.header->type = SPICE_MSG_CURSOR_INIT;
> + red_channel_init_send_data(&channel->common.base, SPICE_MSG_CURSOR_INIT, &worker->cursor->pipe_data);
> msg.visible = worker->cursor_visible;
> msg.position = worker->cursor_position;
> msg.trail_length = worker->cursor_trail_length;
> @@ -8161,7 +8158,7 @@ static void red_send_cursor_init(CursorChannel *channel)
> spice_marshall_msg_cursor_init(channel->common.base.send_data.marshaller, &msg);
> add_buf_from_info(&channel->common.base, channel->common.base.send_data.marshaller, &info);
>
> - red_begin_send_message(&channel->common.base, worker->cursor);
> + red_begin_send_message(&channel->common.base);
> }
>
> static void red_send_local_cursor(CursorChannel *cursor_channel, LocalCursor *cursor)
> @@ -8174,7 +8171,7 @@ static void red_send_local_cursor(CursorChannel *cursor_channel, LocalCursor *cu
> ASSERT(cursor_channel);
>
> channel = &cursor_channel->common.base;
> - channel->send_data.header->type = SPICE_MSG_CURSOR_SET;
> + red_channel_init_send_data(channel, SPICE_MSG_CURSOR_SET, &cursor->base.pipe_data);
> cursor_set.position = cursor->position;
> cursor_set.visible = worker->cursor_visible;
>
> @@ -8182,7 +8179,7 @@ static void red_send_local_cursor(CursorChannel *cursor_channel, LocalCursor *cu
> spice_marshall_msg_cursor_set(channel->send_data.marshaller, &cursor_set);
> add_buf_from_info(channel, channel->send_data.marshaller, &info);
>
> - red_begin_send_message(channel, cursor);
> + red_begin_send_message(channel);
>
> red_release_cursor(cursor_channel->common.worker, (CursorItem *)cursor);
> }
> @@ -8191,11 +8188,11 @@ static void cursor_channel_send_migrate(CursorChannel *cursor_channel)
> {
> SpiceMsgMigrate migrate;
>
> - cursor_channel->common.base.send_data.header->type = SPICE_MSG_MIGRATE;
> + red_channel_init_send_data(&cursor_channel->common.base, SPICE_MSG_MIGRATE, NULL);
> migrate.flags = 0;
>
> spice_marshall_msg_migrate(cursor_channel->common.base.send_data.marshaller, &migrate);
> - red_begin_send_message((RedChannel*)cursor_channel, NULL);
> + red_begin_send_message((RedChannel*)cursor_channel);
> }
>
> static void red_send_cursor(CursorChannel *cursor_channel, CursorItem *cursor)
> @@ -8216,7 +8213,7 @@ static void red_send_cursor(CursorChannel *cursor_channel, CursorItem *cursor)
> case QXL_CURSOR_MOVE:
> {
> SpiceMsgCursorMove cursor_move;
> - channel->send_data.header->type = SPICE_MSG_CURSOR_MOVE;
> + red_channel_init_send_data(channel, SPICE_MSG_CURSOR_MOVE, &cursor->pipe_data);
> cursor_move.position = cmd->u.position;
> spice_marshall_msg_cursor_move(m, &cursor_move);
> break;
> @@ -8226,7 +8223,7 @@ static void red_send_cursor(CursorChannel *cursor_channel, CursorItem *cursor)
> SpiceMsgCursorSet cursor_set;
> AddBufInfo info;
>
> - channel->send_data.header->type = SPICE_MSG_CURSOR_SET;
> + red_channel_init_send_data(channel, SPICE_MSG_CURSOR_SET, &cursor->pipe_data);
> cursor_set.position = cmd->u.set.position;
> cursor_set.visible = worker->cursor_visible;
>
> @@ -8236,13 +8233,13 @@ static void red_send_cursor(CursorChannel *cursor_channel, CursorItem *cursor)
> break;
> }
> case QXL_CURSOR_HIDE:
> - channel->send_data.header->type = SPICE_MSG_CURSOR_HIDE;
> + red_channel_init_send_data(channel, SPICE_MSG_CURSOR_HIDE, &cursor->pipe_data);
> break;
> case QXL_CURSOR_TRAIL:
> {
> SpiceMsgCursorTrail cursor_trail;
>
> - channel->send_data.header->type = SPICE_MSG_CURSOR_TRAIL;
> + red_channel_init_send_data(channel, SPICE_MSG_CURSOR_TRAIL, &cursor->pipe_data);
> cursor_trail.length = cmd->u.trail.length;
> cursor_trail.frequency = cmd->u.trail.frequency;
> spice_marshall_msg_cursor_trail(m, &cursor_trail);
> @@ -8252,7 +8249,7 @@ static void red_send_cursor(CursorChannel *cursor_channel, CursorItem *cursor)
> red_error("bad cursor command %d", cmd->type);
> }
>
> - red_begin_send_message(channel, cursor);
> + red_begin_send_message(channel);
>
> red_release_cursor(cursor_channel->common.worker, cursor);
> }
> @@ -8265,11 +8262,11 @@ static void red_send_surface_create(DisplayChannel *display, SpiceMsgSurfaceCrea
> channel = &display->common.base;
>
> region_init(&display->surface_client_lossy_region[surface_create->surface_id]);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_SURFACE_CREATE;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_SURFACE_CREATE, NULL);
>
> spice_marshall_msg_display_surface_create(channel->send_data.marshaller, surface_create);
>
> - red_begin_send_message(channel, NULL);
> + red_begin_send_message(channel);
> }
>
> static void red_send_surface_destroy(DisplayChannel *display, uint32_t surface_id)
> @@ -8281,13 +8278,13 @@ static void red_send_surface_destroy(DisplayChannel *display, uint32_t surface_i
> channel = &display->common.base;
>
> region_destroy(&display->surface_client_lossy_region[surface_id]);
> - channel->send_data.header->type = SPICE_MSG_DISPLAY_SURFACE_DESTROY;
> + red_channel_init_send_data(channel, SPICE_MSG_DISPLAY_SURFACE_DESTROY, NULL);
>
> surface_destroy.surface_id = surface_id;
>
> spice_marshall_msg_display_surface_destroy(channel->send_data.marshaller, &surface_destroy);
>
> - red_begin_send_message(channel, NULL);
> + red_begin_send_message(channel);
> }
>
> static inline PipeItem *red_pipe_get(RedChannel *channel)
> @@ -8810,7 +8807,7 @@ static inline void flush_display_commands(RedWorker *worker)
> RedChannel *channel = (RedChannel *)worker->display_channel;
> red_ref_channel(channel);
> red_receive(channel);
> - red_send_data(channel, NULL);
> + red_send_data(channel);
> if (red_now() >= end_time) {
> red_printf("update timeout");
> red_disconnect_display(channel);
> @@ -8852,7 +8849,7 @@ static inline void flush_cursor_commands(RedWorker *worker)
> RedChannel *channel = (RedChannel *)worker->cursor_channel;
> red_ref_channel(channel);
> red_receive(channel);
> - red_send_data(channel, NULL);
> + red_send_data(channel);
> if (red_now() >= end_time) {
> red_printf("flush cursor timeout");
> red_disconnect_cursor(channel);
> @@ -9429,7 +9426,7 @@ static void handle_channel_events(EventListener *in_listener, uint32_t events)
> }
>
> if (channel->send_data.blocked) {
> - red_send_data(channel, NULL);
> + red_send_data(channel);
> }
> }
>
> @@ -9702,7 +9699,7 @@ static void red_wait_outgoing_item(RedChannel *channel)
> do {
> usleep(DETACH_SLEEP_DURATION);
> red_receive(channel);
> - red_send_data(channel, NULL);
> + red_send_data(channel);
> } while ((blocked = channel->send_data.blocked) && red_now() < end_time);
>
> if (blocked) {
> @@ -9731,7 +9728,7 @@ static void red_wait_pipe_item_sent(RedChannel *channel, PipeItem *item)
>
> if (channel->send_data.blocked) {
> red_receive(channel);
> - red_send_data(channel, NULL);
> + red_send_data(channel);
> }
> // todo: different push for each channel
> red_push(common->worker);
> @@ -9739,7 +9736,7 @@ static void red_wait_pipe_item_sent(RedChannel *channel, PipeItem *item)
> while((item_in_pipe = ring_item_is_linked(&item->link)) && (red_now() < end_time)) {
> usleep(CHANNEL_PUSH_SLEEP_DURATION);
> red_receive(channel);
> - red_send_data(channel, NULL);
> + red_send_data(channel);
> red_push(common->worker);
> }
>
> --
> 1.7.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
--
Marc-André Lureau
More information about the Spice-devel
mailing list