[Spice-devel] [PATCH 21/26] server/red_channel: add red_channel_disconnect, use in red_worker

Marc-André Lureau marcandre.lureau at gmail.com
Mon Feb 14 17:28:59 PST 2011


On Fri, Feb 11, 2011 at 6:49 PM, Alon Levy <alevy at redhat.com> wrote:
> replace channel_release_res in red_worker with red_channel_disconnect.
> ---
>  server/red_channel.c |   10 ++++++++++
>  server/red_channel.h |    2 ++
>  server/red_worker.c  |   18 +-----------------
>  3 files changed, 13 insertions(+), 17 deletions(-)
>
> diff --git a/server/red_channel.c b/server/red_channel.c
> index 4d6a147..55845b4 100644
> --- a/server/red_channel.c
> +++ b/server/red_channel.c
> @@ -738,3 +738,13 @@ int red_channel_no_item_being_sent(RedChannel *channel)
>     return channel->send_data.item == NULL;
>  }
>
> +void red_channel_disconnect(RedChannel *channel)
> +{
> +    red_channel_pipe_clear(channel);
> +    // TODO: clear our references from the pipe

Is this TODO the missing call to:
channel->release_item(channel, channel->send_data.item, FALSE);

Why did you remove it?

> +    channel->peer->cb_free(channel->peer);
> +    channel->peer = NULL;
> +    channel->send_data.blocked = FALSE;
> +    channel->send_data.size = 0;
> +}
> +
> diff --git a/server/red_channel.h b/server/red_channel.h
> index 02f81fc..e27ed81 100644
> --- a/server/red_channel.h
> +++ b/server/red_channel.h
> @@ -288,5 +288,7 @@ void red_channel_pipe_clear(RedChannel *channel);
>  //  handle_channel_events - this is the only one that was used before, and was in red_channel.c
>  void red_channel_receive(RedChannel *channel);
>  void red_channel_send(RedChannel *channel);
> +// For red_worker
> +void red_channel_disconnect(RedChannel *channel);
>
>  #endif
> diff --git a/server/red_worker.c b/server/red_worker.c
> index a7bf32a..131da7e 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -7183,15 +7183,6 @@ static inline void red_marshall_qxl_drawable(RedWorker *worker, DisplayChannel *
>     }
>  }
>
> -static void inline channel_release_res(RedChannel *channel)
> -{
> -    if (!channel->send_data.item) {
> -        return;
> -    }
> -    channel->release_item(channel, channel->send_data.item, FALSE);
> -    channel->send_data.item = NULL;
> -}
> -
>  static void display_channel_push_release(DisplayChannel *channel, uint8_t type, uint64_t id,
>                                          uint64_t* sync_data)
>  {
> @@ -8269,14 +8260,7 @@ void red_show_tree(RedWorker *worker)
>  // TODO: move to red_channel
>  static void red_disconnect_channel(RedChannel *channel)
>  {
> -    channel_release_res(channel);
> -    red_channel_pipe_clear(channel);
> -
> -    channel->peer->cb_free(channel->peer);
> -
> -    channel->peer = NULL;
> -    channel->send_data.blocked = FALSE;
> -    channel->send_data.size = 0;
> +    red_channel_disconnect(channel);
>     red_unref_channel(channel);
>  }
>
> --
> 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