Re: [PATCH 12/16] Store 'renderers' as GArray in RedsState

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2016-01-27 at 12:48 +0000, Frediano Ziglio wrote:
> From: Jonathon Jongsma <jjongsma@xxxxxxxxxx>
> 
> Acked-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
> ---
>  server/display-channel.c | 13 +++++++------
>  server/display-channel.h |  3 +--
>  server/reds-private.h    |  2 ++
>  server/reds.c            | 20 ++++++++++++--------
>  server/reds.h            |  5 ++---
>  5 files changed, 24 insertions(+), 19 deletions(-)
> 
> diff --git a/server/display-channel.c b/server/display-channel.c
> index f0d133a..2282847 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -1911,10 +1911,11 @@ void
> display_channel_create_surface(DisplayChannel *display, uint32_t
> surface_id
>  
>      if (display->renderer == RED_RENDERER_INVALID) {
>          int i;
> -        for (i = 0; i < display->num_renderers; i++) {
> -            surface->context.canvas =
> create_canvas_for_surface(display, surface, display->renderers[i]);
> +        for (i = 0; i < display->renderers->len; i++) {
> +            uint32_t renderer = g_array_index(display->renderers,
> uint32_t, i);
> +            surface->context.canvas =
> create_canvas_for_surface(display, surface, renderer);
>              if (surface->context.canvas) {
> -                display->renderer = display->renderers[i];
> +                display->renderer = renderer;
>                  break;
>              }
>          }
> @@ -2030,8 +2031,9 @@ DisplayChannel* display_channel_new(RedWorker
> *worker, int migrate, int stream_v
>      static SpiceImageSurfacesOps image_surfaces_ops = {
>          image_surfaces_get,
>      };
> +    GArray *renderers = reds_get_renderers(reds);
>  
> -    spice_return_val_if_fail(num_renderers > 0, NULL);
> +    spice_return_val_if_fail(renderers->len > 0, NULL);
>  
>      spice_info("create display channel");
>      display = (DisplayChannel *)red_worker_new_channel(
> @@ -2063,8 +2065,7 @@ DisplayChannel* display_channel_new(RedWorker
> *worker, int migrate, int stream_v
>      stat_compress_init(&display->lz4_stat, "lz4", stat_clock);
>  
>      display->n_surfaces = n_surfaces;
> -    display->num_renderers = num_renderers;
> -    memcpy(display->renderers, renderers, sizeof(display-
> >renderers));
> +    display->renderers = g_array_ref(renderers);

and no g_array_unref(). Add TODO or FIXME ?

Pavel

>      display->renderer = RED_RENDERER_INVALID;
>  
>      ring_init(&display->current_list);
> diff --git a/server/display-channel.h b/server/display-channel.h
> index bf29cd3..34fb57f 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -168,8 +168,7 @@ struct DisplayChannel {
>  
>      MonitorsConfig *monitors_config;
>  
> -    uint32_t num_renderers;
> -    uint32_t renderers[RED_RENDERER_LAST];
> +    GArray *renderers;
>      uint32_t renderer;
>      int enable_jpeg;
>      int enable_zlib_glz_wrap;
> diff --git a/server/reds-private.h b/server/reds-private.h
> index 75a4f59..7a3b524 100644
> --- a/server/reds-private.h
> +++ b/server/reds-private.h
> @@ -196,6 +196,8 @@ struct RedsState {
>      int default_channel_security;
>      ChannelSecurityOptions *channels_security;
>      const char *default_renderer;
> +    GArray *renderers;
> +
>  };
>  
>  #endif
> diff --git a/server/reds.c b/server/reds.c
> index 3f2a132..c671e7a 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -3446,6 +3446,7 @@ SPICE_GNUC_VISIBLE SpiceServer
> *spice_server_new(void)
>      reds->default_channel_security =
>          SPICE_CHANNEL_SECURITY_NONE | SPICE_CHANNEL_SECURITY_SSL;
>      reds->default_renderer = "sw";
> +    reds->renderers = g_array_sized_new(FALSE, TRUE,
> sizeof(uint32_t), RED_RENDERER_LAST);
>      return reds;
>  }
>  
> @@ -3459,9 +3460,6 @@ static RendererInfo renderers_info[] = {
>      {RED_RENDERER_INVALID, NULL},
>  };
>  
> -uint32_t renderers[RED_RENDERER_LAST];
> -uint32_t num_renderers = 0;
> -
>  static RendererInfo *find_renderer(const char *name)
>  {
>      RendererInfo *inf = renderers_info;
> @@ -3474,14 +3472,14 @@ static RendererInfo *find_renderer(const char
> *name)
>      return NULL;
>  }
>  
> -static int red_add_renderer(const char *name)
> +static int reds_add_renderer(RedsState *reds, const char *name)
>  {
>      RendererInfo *inf;
>  
> -    if (num_renderers == RED_RENDERER_LAST || !(inf =
> find_renderer(name))) {
> +    if (reds->renderers->len == RED_RENDERER_LAST || !(inf =
> find_renderer(name))) {
>          return FALSE;
>      }
> -    renderers[num_renderers++] = inf->id;
> +    g_array_append_val(reds->renderers, inf->id);
>      return TRUE;
>  }
>  
> @@ -3492,7 +3490,7 @@ SPICE_GNUC_VISIBLE int
> spice_server_init(SpiceServer *s, SpiceCoreInterface *cor
>      spice_assert(reds == s);
>      ret = do_spice_init(s, core);
>      if (s->default_renderer) {
> -        red_add_renderer(s->default_renderer);
> +        reds_add_renderer(s, s->default_renderer);
>      }
>      return ret;
>  }
> @@ -3500,6 +3498,7 @@ SPICE_GNUC_VISIBLE int
> spice_server_init(SpiceServer *s, SpiceCoreInterface *cor
>  SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *s)
>  {
>      spice_assert(reds == s);
> +    g_array_unref(s->renderers);
>      reds_exit();
>  }
>  
> @@ -3783,7 +3782,7 @@ SPICE_GNUC_VISIBLE int
> spice_server_is_server_mouse(SpiceServer *s)
>  SPICE_GNUC_VISIBLE int spice_server_add_renderer(SpiceServer *s,
> const char *name)
>  {
>      spice_assert(reds == s);
> -    if (!red_add_renderer(name)) {
> +    if (!reds_add_renderer(s, name)) {
>          return -1;
>      }
>      s->default_renderer = NULL;
> @@ -4031,3 +4030,8 @@ SPICE_GNUC_VISIBLE void
> spice_server_set_keepalive_timeout(SpiceServer *s, int t
>      reds->keepalive_timeout = timeout;
>      spice_debug("keepalive timeout=%d", timeout);
>  }
> +
> +GArray* reds_get_renderers(RedsState *reds)
> +{
> +    return reds->renderers;
> +}
> diff --git a/server/reds.h b/server/reds.h
> index e398607..4034199 100644
> --- a/server/reds.h
> +++ b/server/reds.h
> @@ -63,6 +63,8 @@ int reds_get_agent_mouse(void); // used by
> inputs_channel
>  int reds_has_vdagent(void); // used by inputs channel
>  void reds_handle_agent_mouse_event(RedsState *reds, const
> VDAgentMouseState *mouse_state); // used by inputs_channel
>  
> +GArray* reds_get_renderers(RedsState *reds);
> +
>  enum {
>      RED_RENDERER_INVALID,
>      RED_RENDERER_SW,
> @@ -70,9 +72,6 @@ enum {
>      RED_RENDERER_LAST
>  };
>  
> -extern uint32_t renderers[RED_RENDERER_LAST];
> -extern uint32_t num_renderers;
> -
>  extern struct SpiceCoreInterfaceInternal *core;
>  extern uint32_t streaming_video;
>  extern SpiceImageCompression image_compression;
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]