[Spice-devel] [PATCH 07/11] make red_pipe_item_unref more typesafe
Jonathon Jongsma
jjongsma at redhat.com
Fri May 20 20:35:50 UTC 2016
ok, I'll take some added typesafety over a having to pass the ->parent
occasionally
Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
On Fri, 2016-05-20 at 14:01 +0100, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> server/char-device.c | 2 +-
> server/red-pipe-item.c | 4 +---
> server/red-pipe-item.h | 2 +-
> server/reds.c | 12 +++++-------
> 4 files changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/server/char-device.c b/server/char-device.c
> index b67e192..4a6e4c8 100644
> --- a/server/char-device.c
> +++ b/server/char-device.c
> @@ -189,7 +189,7 @@ static void red_char_device_client_free(RedCharDevice
> *dev,
> dev_client->wait_for_tokens_timer = NULL;
> }
>
> - g_queue_free_full(dev_client->send_queue, red_pipe_item_unref);
> + g_queue_free_full(dev_client->send_queue,
> (GDestroyNotify)red_pipe_item_unref);
>
> /* remove write buffers that are associated with the client */
> spice_debug("write_queue_is_empty %d", ring_is_empty(&dev->priv
> ->write_queue) && !dev->priv->cur_write_buf);
> diff --git a/server/red-pipe-item.c b/server/red-pipe-item.c
> index 74bf267..31262fa 100644
> --- a/server/red-pipe-item.c
> +++ b/server/red-pipe-item.c
> @@ -29,10 +29,8 @@ RedPipeItem *red_pipe_item_ref(RedPipeItem *item)
> return item;
> }
>
> -void red_pipe_item_unref(gpointer object)
> +void red_pipe_item_unref(RedPipeItem *item)
> {
> - RedPipeItem *item = object;
> -
> g_return_if_fail(item->refcount > 0);
>
> if (g_atomic_int_dec_and_test(&item->refcount)) {
> diff --git a/server/red-pipe-item.h b/server/red-pipe-item.h
> index 0138216..bf13b0b 100644
> --- a/server/red-pipe-item.h
> +++ b/server/red-pipe-item.h
> @@ -37,7 +37,7 @@ typedef struct RedPipeItem {
>
> void red_pipe_item_init_full(RedPipeItem *item, int type,
> red_pipe_item_free_t free_func);
> RedPipeItem *red_pipe_item_ref(RedPipeItem *item);
> -void red_pipe_item_unref(gpointer item);
> +void red_pipe_item_unref(RedPipeItem *item);
>
> static inline int red_pipe_item_is_linked(RedPipeItem *item)
> {
> diff --git a/server/reds.c b/server/reds.c
> index 8ea6098..74de7d5 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -523,7 +523,7 @@ static void reds_reset_vdp(RedsState *reds)
> dev->priv->receive_len = sizeof(dev->priv->vdi_chunk_header);
> dev->priv->message_receive_len = 0;
> if (dev->priv->current_read_buf) {
> - red_pipe_item_unref(dev->priv->current_read_buf);
> + red_pipe_item_unref(&dev->priv->current_read_buf->parent);
> dev->priv->current_read_buf = NULL;
> }
> /* Reset read filter to start with clean state when the agent reconnects
> */
> @@ -747,9 +747,7 @@ static void reds_agent_remove(RedsState *reds)
>
> static void vdi_port_read_buf_release(uint8_t *data, void *opaque)
> {
> - RedVDIReadBuf *buf = (RedVDIReadBuf *)opaque;
> -
> - red_pipe_item_unref(buf);
> + red_pipe_item_unref((RedPipeItem *)opaque);
> }
>
> /* returns TRUE if the buffer can be forwarded */
> @@ -895,7 +893,7 @@ static RedPipeItem
> *vdi_port_read_one_msg_from_device(SpiceCharDeviceInstance *s
> if (error) {
> reds_agent_remove(reds);
> }
> - red_pipe_item_unref(dispatch_buf);
> + red_pipe_item_unref(&dispatch_buf->parent);
> }
> }
> } /* END switch */
> @@ -1273,7 +1271,7 @@ void reds_on_main_channel_migrate(RedsState *reds,
> MainChannelClient *mcc)
> if (error) {
> reds_agent_remove(reds);
> }
> - red_pipe_item_unref(read_buf);
> + red_pipe_item_unref(&read_buf->parent);
> }
>
> spice_assert(agent_dev->priv->receive_len);
> @@ -4353,7 +4351,7 @@ red_char_device_vdi_port_init(RedCharDeviceVDIPort
> *self)
> /* This ensures the newly created buffer is placed in the
> * RedCharDeviceVDIPort::read_bufs queue ready to be reused
> */
> - red_pipe_item_unref(buf);
> + red_pipe_item_unref(&buf->parent);
> }
> }
>
More information about the Spice-devel
mailing list