[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