[Spice-devel,03/13] smartcard: Derive MsgItem from RedPipeItem

Submitted by Jonathon Jongsma on April 13, 2016, 7:37 p.m.

Details

Message ID 1460576282-27544-4-git-send-email-jjongsma@redhat.com
State New
Headers show
Series "Backported patches from refactory branch (April 13)" ( rev: 4 3 2 1 ) in Spice

Commit Message

Jonathon Jongsma April 13, 2016, 7:37 p.m.
From: Christophe Fergeau <cfergeau@redhat.com>

This allows to reuse red_pipe_item_{ref, unref} rather than
reimplementing them in smartcard.c
---
 server/smartcard.c | 37 +++++++++++++------------------------
 1 file changed, 13 insertions(+), 24 deletions(-)

Patch hide | download patch | download mbox

diff --git a/server/smartcard.c b/server/smartcard.c
index 6a6b961..902b2a1 100644
--- a/server/smartcard.c
+++ b/server/smartcard.c
@@ -90,15 +90,12 @@  typedef struct ErrorItem {
 
 
 typedef struct MsgItem {
-    PipeItem base;
-    uint32_t refs;
+    RedPipeItem base;
 
     VSCMsgHeader* vheader;
 } MsgItem;
 
 static MsgItem *smartcard_get_vsc_msg_item(RedChannelClient *rcc, VSCMsgHeader *vheader);
-static MsgItem *smartcard_ref_vsc_msg_item(MsgItem *item);
-static void smartcard_unref_vsc_msg_item(MsgItem *item);
 static void smartcard_channel_client_pipe_add_push(RedChannelClient *rcc, PipeItem *item);
 
 typedef struct SmartCardChannel {
@@ -173,13 +170,13 @@  static RedCharDeviceMsgToClient *smartcard_read_msg_from_device(SpiceCharDeviceI
 static RedCharDeviceMsgToClient *smartcard_ref_msg_to_client(RedCharDeviceMsgToClient *msg,
                                                              void *opaque)
 {
-    return smartcard_ref_vsc_msg_item((MsgItem *)msg);
+    return red_pipe_item_ref(msg);
 }
 
 static void smartcard_unref_msg_to_client(RedCharDeviceMsgToClient *msg,
                                           void *opaque)
 {
-    smartcard_unref_vsc_msg_item((MsgItem *)msg);
+    red_pipe_item_ref(msg);
 }
 
 static void smartcard_send_msg_to_client(RedCharDeviceMsgToClient *msg,
@@ -188,7 +185,7 @@  static void smartcard_send_msg_to_client(RedCharDeviceMsgToClient *msg,
 {
     RedCharDeviceSmartcard *dev = opaque;
     spice_assert(dev->priv->scc && dev->priv->scc->base.client == client);
-    smartcard_channel_client_pipe_add_push(&dev->priv->scc->base, &((MsgItem *)msg)->base);
+    smartcard_channel_client_pipe_add_push(&dev->priv->scc->base, (PipeItem *)msg);
 
 }
 
@@ -525,7 +522,7 @@  static void smartcard_channel_release_pipe_item(RedChannelClient *rcc,
                                       PipeItem *item, int item_pushed)
 {
     if (item->type == PIPE_ITEM_TYPE_SMARTCARD_DATA) {
-        smartcard_unref_vsc_msg_item((MsgItem *)item);
+        red_pipe_item_unref(item);
     } else {
         free(item);
     }
@@ -565,30 +562,22 @@  static void smartcard_push_error(RedChannelClient *rcc, uint32_t reader_id, VSCE
     smartcard_channel_client_pipe_add_push(rcc, &error_item->base);
 }
 
+static void smartcard_free_vsc_msg_item(MsgItem *item)
+{
+    free(item->vheader);
+    free(item);
+}
+
 static MsgItem *smartcard_get_vsc_msg_item(RedChannelClient *rcc, VSCMsgHeader *vheader)
 {
     MsgItem *msg_item = spice_new0(MsgItem, 1);
 
-    pipe_item_init(&msg_item->base, PIPE_ITEM_TYPE_SMARTCARD_DATA);
-    msg_item->refs = 1;
+    red_pipe_item_init(&msg_item->base, PIPE_ITEM_TYPE_SMARTCARD_DATA,
+                       (GDestroyNotify)smartcard_free_vsc_msg_item);
     msg_item->vheader = vheader;
     return msg_item;
 }
 
-static MsgItem *smartcard_ref_vsc_msg_item(MsgItem *item)
-{
-    item->refs++;
-    return item;
-}
-
-static void smartcard_unref_vsc_msg_item(MsgItem *item)
-{
-    if (!--item->refs) {
-        free(item->vheader);
-        free(item);
-    }
-}
-
 static void smartcard_remove_reader(SmartCardChannelClient *scc, uint32_t reader_id)
 {
     SpiceCharDeviceInstance *char_device = smartcard_readers_get(reader_id);

Comments

Note that I kept the ref/unref adapter functions after dropping the first patch
in this series and rebasing. They will be removed in a later patch in this
series

Acked-by: Jonathon Jongsma

On Wed, 2016-04-13 at 14:37 -0500, Jonathon Jongsma wrote:
> From: Christophe Fergeau <cfergeau@redhat.com>
> 
> This allows to reuse red_pipe_item_{ref, unref} rather than
> reimplementing them in smartcard.c
> ---
>  server/smartcard.c | 37 +++++++++++++------------------------
>  1 file changed, 13 insertions(+), 24 deletions(-)
> 
> diff --git a/server/smartcard.c b/server/smartcard.c
> index 6a6b961..902b2a1 100644
> --- a/server/smartcard.c
> +++ b/server/smartcard.c
> @@ -90,15 +90,12 @@ typedef struct ErrorItem {
>  
>  
>  typedef struct MsgItem {
> -    PipeItem base;
> -    uint32_t refs;
> +    RedPipeItem base;
>  
>      VSCMsgHeader* vheader;
>  } MsgItem;
>  
>  static MsgItem *smartcard_get_vsc_msg_item(RedChannelClient *rcc,
> VSCMsgHeader *vheader);
> -static MsgItem *smartcard_ref_vsc_msg_item(MsgItem *item);
> -static void smartcard_unref_vsc_msg_item(MsgItem *item);
>  static void smartcard_channel_client_pipe_add_push(RedChannelClient *rcc,
> PipeItem *item);
>  
>  typedef struct SmartCardChannel {
> @@ -173,13 +170,13 @@ static RedCharDeviceMsgToClient
> *smartcard_read_msg_from_device(SpiceCharDeviceI
>  static RedCharDeviceMsgToClient
> *smartcard_ref_msg_to_client(RedCharDeviceMsgToClient *msg,
>                                                               void *opaque)
>  {
> -    return smartcard_ref_vsc_msg_item((MsgItem *)msg);
> +    return red_pipe_item_ref(msg);
>  }
>  
>  static void smartcard_unref_msg_to_client(RedCharDeviceMsgToClient *msg,
>                                            void *opaque)
>  {
> -    smartcard_unref_vsc_msg_item((MsgItem *)msg);
> +    red_pipe_item_ref(msg);
>  }
>  
>  static void smartcard_send_msg_to_client(RedCharDeviceMsgToClient *msg,
> @@ -188,7 +185,7 @@ static void
> smartcard_send_msg_to_client(RedCharDeviceMsgToClient *msg,
>  {
>      RedCharDeviceSmartcard *dev = opaque;
>      spice_assert(dev->priv->scc && dev->priv->scc->base.client == client);
> -    smartcard_channel_client_pipe_add_push(&dev->priv->scc->base, &((MsgItem
> *)msg)->base);
> +    smartcard_channel_client_pipe_add_push(&dev->priv->scc->base, (PipeItem
> *)msg);
>  
>  }
>  
> @@ -525,7 +522,7 @@ static void
> smartcard_channel_release_pipe_item(RedChannelClient *rcc,
>                                        PipeItem *item, int item_pushed)
>  {
>      if (item->type == PIPE_ITEM_TYPE_SMARTCARD_DATA) {
> -        smartcard_unref_vsc_msg_item((MsgItem *)item);
> +        red_pipe_item_unref(item);
>      } else {
>          free(item);
>      }
> @@ -565,30 +562,22 @@ static void smartcard_push_error(RedChannelClient *rcc,
> uint32_t reader_id, VSCE
>      smartcard_channel_client_pipe_add_push(rcc, &error_item->base);
>  }
>  
> +static void smartcard_free_vsc_msg_item(MsgItem *item)
> +{
> +    free(item->vheader);
> +    free(item);
> +}
> +
>  static MsgItem *smartcard_get_vsc_msg_item(RedChannelClient *rcc,
> VSCMsgHeader *vheader)
>  {
>      MsgItem *msg_item = spice_new0(MsgItem, 1);
>  
> -    pipe_item_init(&msg_item->base, PIPE_ITEM_TYPE_SMARTCARD_DATA);
> -    msg_item->refs = 1;
> +    red_pipe_item_init(&msg_item->base, PIPE_ITEM_TYPE_SMARTCARD_DATA,
> +                       (GDestroyNotify)smartcard_free_vsc_msg_item);
>      msg_item->vheader = vheader;
>      return msg_item;
>  }
>  
> -static MsgItem *smartcard_ref_vsc_msg_item(MsgItem *item)
> -{
> -    item->refs++;
> -    return item;
> -}
> -
> -static void smartcard_unref_vsc_msg_item(MsgItem *item)
> -{
> -    if (!--item->refs) {
> -        free(item->vheader);
> -        free(item);
> -    }
> -}
> -
>  static void smartcard_remove_reader(SmartCardChannelClient *scc, uint32_t
> reader_id)
>  {
>      SpiceCharDeviceInstance *char_device = smartcard_readers_get(reader_id);