[Spice-devel,02/11] Handle reference for RedPipeItem in RedChannel

Submitted by Frediano Ziglio on May 20, 2016, 1:01 p.m.

Details

Message ID 1463749309-6456-3-git-send-email-fziglio@redhat.com
State New
Headers show
Series "RedChannel refcounting and type safety" ( rev: 1 ) in Spice

Not browsing as part of any series.

Commit Message

Frediano Ziglio May 20, 2016, 1:01 p.m.
Remove the need to release the item inside send_item callbacks.
This looks like a partial rollback of previous patch but is
to make clear the intention of the change.
The lifetime of items could extend a bit further but there
are no cases this small lag should cause problems.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
---
 server/cursor-channel.c | 1 -
 server/dcc-send.c       | 2 --
 server/inputs-channel.c | 1 -
 server/main-channel.c   | 2 --
 server/red-channel.c    | 2 +-
 server/smartcard.c      | 2 --
 server/spicevmc.c       | 2 --
 7 files changed, 1 insertion(+), 11 deletions(-)

Patch hide | download patch | download mbox

diff --git a/server/cursor-channel.c b/server/cursor-channel.c
index 104bf51..949cbc4 100644
--- a/server/cursor-channel.c
+++ b/server/cursor-channel.c
@@ -336,7 +336,6 @@  static void cursor_channel_send_item(RedChannelClient *rcc, RedPipeItem *pipe_it
         spice_error("invalid pipe item type");
     }
 
-    red_pipe_item_unref(pipe_item);
     red_channel_client_begin_send_message(rcc);
 }
 
diff --git a/server/dcc-send.c b/server/dcc-send.c
index f0f2e16..05da07f 100644
--- a/server/dcc-send.c
+++ b/server/dcc-send.c
@@ -2455,8 +2455,6 @@  void dcc_send_item(DisplayChannelClient *dcc, RedPipeItem *pipe_item)
         spice_warn_if_reached();
     }
 
-    red_pipe_item_unref(pipe_item);
-
     // a message is pending
     if (red_channel_client_send_message_pending(rcc)) {
         begin_send_message(rcc);
diff --git a/server/inputs-channel.c b/server/inputs-channel.c
index 3218a48..4b5813f 100644
--- a/server/inputs-channel.c
+++ b/server/inputs-channel.c
@@ -289,7 +289,6 @@  static void inputs_channel_send_item(RedChannelClient *rcc, RedPipeItem *base)
             spice_warning("invalid pipe iten %d", base->type);
             break;
     }
-    red_pipe_item_unref(base);
     red_channel_client_begin_send_message(rcc);
 }
 
diff --git a/server/main-channel.c b/server/main-channel.c
index 219212c..70aaff7 100644
--- a/server/main-channel.c
+++ b/server/main-channel.c
@@ -723,7 +723,6 @@  static void main_channel_send_item(RedChannelClient *rcc, RedPipeItem *base)
         spice_printerr("Init msg for client %p was not sent yet "
                        "(client is probably during semi-seamless migration). Ignoring msg type %d",
                    rcc->client, base->type);
-        red_pipe_item_unref(base);
         return;
     }
     switch (base->type) {
@@ -789,7 +788,6 @@  static void main_channel_send_item(RedChannelClient *rcc, RedPipeItem *base)
             main_channel_marshall_agent_connected(m, rcc, base);
             break;
     };
-    red_pipe_item_unref(base);
     red_channel_client_begin_send_message(rcc);
 }
 
diff --git a/server/red-channel.c b/server/red-channel.c
index 8226bc4..23defc0 100644
--- a/server/red-channel.c
+++ b/server/red-channel.c
@@ -576,7 +576,7 @@  static void red_channel_client_send_item(RedChannelClient *rcc, RedPipeItem *ite
             break;
         default:
             rcc->channel->channel_cbs.send_item(rcc, item);
-            return;
+            break;
     }
     red_pipe_item_unref(item);
 }
diff --git a/server/smartcard.c b/server/smartcard.c
index e68ccdc..c39aeae 100644
--- a/server/smartcard.c
+++ b/server/smartcard.c
@@ -498,10 +498,8 @@  static void smartcard_channel_send_item(RedChannelClient *rcc, RedPipeItem *item
         break;
     default:
         spice_error("bad pipe item %d", item->type);
-        red_pipe_item_unref(item);
         return;
     }
-    red_pipe_item_unref(item);
     red_channel_client_begin_send_message(rcc);
 }
 
diff --git a/server/spicevmc.c b/server/spicevmc.c
index be51d54..1e68909 100644
--- a/server/spicevmc.c
+++ b/server/spicevmc.c
@@ -425,10 +425,8 @@  static void spicevmc_red_channel_send_item(RedChannelClient *rcc,
         break;
     default:
         spice_error("bad pipe item %d", item->type);
-        red_pipe_item_unref(item);
         return;
     }
-    red_pipe_item_unref(item);
     red_channel_client_begin_send_message(rcc);
 }
 

Comments

Better.

Acked-by: Jonathon Jongsma <jjongsma@redhat.com>


On Fri, 2016-05-20 at 14:01 +0100, Frediano Ziglio wrote:
> Remove the need to release the item inside send_item callbacks.
> This looks like a partial rollback of previous patch but is
> to make clear the intention of the change.
> The lifetime of items could extend a bit further but there
> are no cases this small lag should cause problems.
> 
> Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> ---
>  server/cursor-channel.c | 1 -
>  server/dcc-send.c       | 2 --
>  server/inputs-channel.c | 1 -
>  server/main-channel.c   | 2 --
>  server/red-channel.c    | 2 +-
>  server/smartcard.c      | 2 --
>  server/spicevmc.c       | 2 --
>  7 files changed, 1 insertion(+), 11 deletions(-)
> 
> diff --git a/server/cursor-channel.c b/server/cursor-channel.c
> index 104bf51..949cbc4 100644
> --- a/server/cursor-channel.c
> +++ b/server/cursor-channel.c
> @@ -336,7 +336,6 @@ static void cursor_channel_send_item(RedChannelClient
> *rcc, RedPipeItem *pipe_it
>          spice_error("invalid pipe item type");
>      }
>  
> -    red_pipe_item_unref(pipe_item);
>      red_channel_client_begin_send_message(rcc);
>  }
>  
> diff --git a/server/dcc-send.c b/server/dcc-send.c
> index f0f2e16..05da07f 100644
> --- a/server/dcc-send.c
> +++ b/server/dcc-send.c
> @@ -2455,8 +2455,6 @@ void dcc_send_item(DisplayChannelClient *dcc,
> RedPipeItem *pipe_item)
>          spice_warn_if_reached();
>      }
>  
> -    red_pipe_item_unref(pipe_item);
> -
>      // a message is pending
>      if (red_channel_client_send_message_pending(rcc)) {
>          begin_send_message(rcc);
> diff --git a/server/inputs-channel.c b/server/inputs-channel.c
> index 3218a48..4b5813f 100644
> --- a/server/inputs-channel.c
> +++ b/server/inputs-channel.c
> @@ -289,7 +289,6 @@ static void inputs_channel_send_item(RedChannelClient
> *rcc, RedPipeItem *base)
>              spice_warning("invalid pipe iten %d", base->type);
>              break;
>      }
> -    red_pipe_item_unref(base);
>      red_channel_client_begin_send_message(rcc);
>  }
>  
> diff --git a/server/main-channel.c b/server/main-channel.c
> index 219212c..70aaff7 100644
> --- a/server/main-channel.c
> +++ b/server/main-channel.c
> @@ -723,7 +723,6 @@ static void main_channel_send_item(RedChannelClient *rcc,
> RedPipeItem *base)
>          spice_printerr("Init msg for client %p was not sent yet "
>                         "(client is probably during semi-seamless migration).
> Ignoring msg type %d",
>                     rcc->client, base->type);
> -        red_pipe_item_unref(base);
>          return;
>      }
>      switch (base->type) {
> @@ -789,7 +788,6 @@ static void main_channel_send_item(RedChannelClient *rcc,
> RedPipeItem *base)
>              main_channel_marshall_agent_connected(m, rcc, base);
>              break;
>      };
> -    red_pipe_item_unref(base);
>      red_channel_client_begin_send_message(rcc);
>  }
>  
> diff --git a/server/red-channel.c b/server/red-channel.c
> index 8226bc4..23defc0 100644
> --- a/server/red-channel.c
> +++ b/server/red-channel.c
> @@ -576,7 +576,7 @@ static void red_channel_client_send_item(RedChannelClient
> *rcc, RedPipeItem *ite
>              break;
>          default:
>              rcc->channel->channel_cbs.send_item(rcc, item);
> -            return;
> +            break;
>      }
>      red_pipe_item_unref(item);
>  }
> diff --git a/server/smartcard.c b/server/smartcard.c
> index e68ccdc..c39aeae 100644
> --- a/server/smartcard.c
> +++ b/server/smartcard.c
> @@ -498,10 +498,8 @@ static void smartcard_channel_send_item(RedChannelClient
> *rcc, RedPipeItem *item
>          break;
>      default:
>          spice_error("bad pipe item %d", item->type);
> -        red_pipe_item_unref(item);
>          return;
>      }
> -    red_pipe_item_unref(item);
>      red_channel_client_begin_send_message(rcc);
>  }
>  
> diff --git a/server/spicevmc.c b/server/spicevmc.c
> index be51d54..1e68909 100644
> --- a/server/spicevmc.c
> +++ b/server/spicevmc.c
> @@ -425,10 +425,8 @@ static void
> spicevmc_red_channel_send_item(RedChannelClient *rcc,
>          break;
>      default:
>          spice_error("bad pipe item %d", item->type);
> -        red_pipe_item_unref(item);
>          return;
>      }
> -    red_pipe_item_unref(item);
>      red_channel_client_begin_send_message(rcc);
>  }
>