[Spice-devel] [PATCH 02/18] server/red_worker: use ack_data struct
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Feb 8 13:09:51 PST 2011
ack
On Mon, Feb 7, 2011 at 7:19 PM, Alon Levy <alevy at redhat.com> wrote:
> start of move to red_channel based channels
> ---
> server/red_worker.c | 38 ++++++++++++++++++++------------------
> 1 files changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/server/red_worker.c b/server/red_worker.c
> index df51841..97f5e70 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -362,10 +362,12 @@ struct RedChannel {
> Ring pipe;
> uint32_t pipe_size;
>
> - uint32_t client_ack_window;
> - uint32_t ack_generation;
> - uint32_t client_ack_generation;
> - uint32_t messages_window;
> + struct {
> + uint32_t client_window;
> + uint32_t generation;
> + uint32_t client_generation;
> + uint32_t messages_window;
> + } ack_data;
>
> struct {
> int blocked;
> @@ -7386,7 +7388,7 @@ static inline void red_begin_send_message(RedChannel *channel, void *item)
> 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->messages_window++;
> + 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);
> }
> @@ -7742,9 +7744,9 @@ static void red_send_set_ack(RedChannel *channel)
>
> ASSERT(channel);
> channel->send_data.header->type = SPICE_MSG_SET_ACK;
> - ack.generation = ++channel->ack_generation;
> - ack.window = channel->client_ack_window;
> - channel->messages_window = 0;
> + 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);
>
> @@ -8274,7 +8276,7 @@ static inline PipeItem *red_pipe_get(RedChannel *channel)
> return NULL;
> }
>
> - if (channel->messages_window > channel->client_ack_window * 2) {
> + if (channel->ack_data.messages_window > channel->ack_data.client_window * 2) {
> channel->send_data.blocked = TRUE;
> return NULL;
> }
> @@ -8896,7 +8898,7 @@ static void on_new_display_channel(RedWorker *worker)
> if (!display_channel_wait_for_init(display_channel)) {
> return;
> }
> - display_channel->base.messages_window = 0;
> + display_channel->base.ack_data.messages_window = 0;
> if (worker->surfaces[0].context.canvas) {
> red_current_flush(worker, 0);
> push_new_primary_surface(worker);
> @@ -8912,11 +8914,11 @@ static int channel_handle_message(RedChannel *channel, size_t size, uint32_t typ
> {
> switch (type) {
> case SPICE_MSGC_ACK_SYNC:
> - channel->client_ack_generation = *(uint32_t *)message;
> + channel->ack_data.client_generation = *(uint32_t *)message;
> break;
> case SPICE_MSGC_ACK:
> - if (channel->client_ack_generation == channel->ack_generation) {
> - channel->messages_window -= channel->client_ack_window;
> + if (channel->ack_data.client_generation == channel->ack_data.generation) {
> + channel->ack_data.messages_window -= channel->ack_data.client_window;
> }
> break;
> case SPICE_MSGC_DISCONNECTING:
> @@ -9211,7 +9213,7 @@ static int display_channel_handle_migrate_data(DisplayChannel *channel, size_t s
>
> red_pipe_add_type((RedChannel *)channel, PIPE_ITEM_TYPE_INVAL_PALLET_CACHE);
>
> - channel->base.messages_window = 0;
> + channel->base.ack_data.messages_window = 0;
> return TRUE;
> }
>
> @@ -9346,11 +9348,11 @@ static RedChannel *__new_channel(RedWorker *worker, int size, uint32_t channel_i
> channel->handle_message = handle_message;
> channel->peer = peer;
> channel->worker = worker;
> - channel->messages_window = ~0; // blocks send message (maybe use send_data.blocked +
> + channel->ack_data.messages_window = ~0; // blocks send message (maybe use send_data.blocked +
> // block flags)
> - channel->client_ack_window = IS_LOW_BANDWIDTH() ? WIDE_CLIENT_ACK_WINDOW :
> + channel->ack_data.client_window = IS_LOW_BANDWIDTH() ? WIDE_CLIENT_ACK_WINDOW :
> NARROW_CLIENT_ACK_WINDOW;
> - channel->client_ack_generation = ~0;
> + channel->ack_data.client_generation = ~0;
> channel->recive_data.message = (SpiceDataHeader *)channel->recive_data.buf;
> channel->recive_data.now = channel->recive_data.buf;
> channel->recive_data.end = channel->recive_data.buf + sizeof(channel->recive_data.buf);
> @@ -9537,7 +9539,7 @@ static void on_new_cursor_channel(RedWorker *worker)
>
> ASSERT(channel);
>
> - channel->base.messages_window = 0;
> + channel->base.ack_data.messages_window = 0;
> red_pipe_add_type(&channel->base, PIPE_ITEM_TYPE_SET_ACK);
> if (worker->surfaces[0].context.canvas && !channel->base.migrate) {
> red_pipe_add_type(&worker->cursor_channel->base, PIPE_ITEM_TYPE_CURSOR_INIT);
> --
> 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