[Spice-devel] [PATCH 03/13] smartcard: Derive MsgItem from RedPipeItem
Jonathon Jongsma
jjongsma at redhat.com
Wed Apr 13 20:30:13 UTC 2016
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 at 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);
More information about the Spice-devel
mailing list