On Sun, Apr 17, 2016 at 05:35:07PM +0300, Giulio Camuffo wrote:
> 2016-04-16 6:28 GMT+03:00 Bryce Harrington <[email protected]>:
> > We know ahead of time the maximum number of outputs we'll be
> > configuring, so just alloc that memory from the get-go, instead of
> > realloc'ing for each new output.
> >
> > Suggested-by: Pekka Paalanen <[email protected]>

This change is not strictly required for the backend configuration
refactor, since while the realloc is messy, it works just fine.

Once the x11 backend config patch lands I'll follow up with a separate
patch to implement this change.

> > Signed-off-by: Bryce Harrington <[email protected]>
> > ---
> >  src/main.c | 37 ++++++++++++-------------------------
> >  1 file changed, 12 insertions(+), 25 deletions(-)
> >
> > diff --git a/src/main.c b/src/main.c
> > index 9a8094f..99e5067 100644
> > --- a/src/main.c
> > +++ b/src/main.c
> > @@ -754,21 +754,6 @@ load_headless_backend(struct weston_compositor *c, 
> > char const * backend,
> >  }
> >
> >  static int
> > -weston_x11_backend_config_append_output_config(struct 
> > weston_x11_backend_config *config,
> > -                                              struct 
> > weston_x11_backend_output_config *output_config) {
> > -       struct weston_x11_backend_output_config *new_outputs;
> > -
> > -       new_outputs = realloc(config->outputs, (config->num_outputs+1) *
> > -                             sizeof(struct 
> > weston_x11_backend_output_config));
> > -       if (new_outputs == NULL)
> > -               return -1;
> > -
> > -       config->outputs = new_outputs;
> > -       config->outputs[(config->num_outputs)++] = *output_config;
> > -       return 0;
> > -}
> > -
> > -static int
> >  load_x11_backend(struct weston_compositor *c, char const * backend,
> >                  int *argc, char **argv, struct weston_config *wc)
> >  {
> > @@ -797,6 +782,15 @@ load_x11_backend(struct weston_compositor *c, char 
> > const * backend,
> >
> >         parse_options(options, ARRAY_LENGTH(options), argc, argv);
> >
> > +       if (option_count < 1) {
> > +               weston_log("No outputs configured\n");
> > +               return -1;
> > +       }
> > +       config.outputs = zalloc((option_count+1) *
> > +                               sizeof(struct 
> > weston_x11_backend_output_config));
> 
> This doesn't really work. As i said on the reply to patch 6,
> option_count will be 0 if the --output-count option is not used, but
> in that case we should use a third variable set to 1, to have a
> default output. That means that the actual outputs count will be
> option_count, if option_count is > 0, otherwise it will be max(1,
> <number of outputs in weston.ini>).

As mentioned in my other reply, output_count is now set to be 1 by
default.  It does actually run, and I tested it with 0, 1, .. 7
outputs.

However, with that said, I am noticing a couple other flaws in this code
which will require a bit more thought.  So I'll drop this patch from the
set for now, and follow up with something better later.

Bryce

> > +       if (config.outputs == NULL)
> > +               return -1;
> > +
> >         section = NULL;
> >         while (weston_config_next_section(wc, &section, &section_name)) {
> >                 struct weston_x11_backend_output_config current_output = { 
> > 0, };
> > @@ -842,11 +836,7 @@ load_x11_backend(struct weston_compositor *c, char 
> > const * backend,
> >                                    t, current_output.name);
> >                 free(t);
> >
> > -               if (weston_x11_backend_config_append_output_config(&config, 
> > &current_output) < 0) {
> > -                       ret = -1;
> > -                       goto out;
> > -               }
> > -
> > +               config.outputs[(config.num_outputs)++] = current_output;
> >                 output_count++;
> >                 if (option_count && output_count >= option_count)
> >                         break;
> > @@ -861,13 +851,10 @@ load_x11_backend(struct weston_compositor *c, char 
> > const * backend,
> >         for (i = output_count; i < option_count; i++) {
> >                 if (asprintf(default_output.name, "screen%d", i) < 0) {
> >                         ret = -1;
> > -                       goto error;
> > -               }
> > -
> > -               if (weston_x11_backend_config_append_output_config(&config, 
> > &default_output) < 0) {
> > -                       ret = -1;
> >                         goto out;
> >                 }
> > +
> > +               config.outputs[(config.num_outputs)++] = default_output;
> >         }
> >
> >         config.base.struct_version = WESTON_X11_BACKEND_CONFIG_VERSION;
> > --
> > 1.9.1
> >
> > _______________________________________________
> > wayland-devel mailing list
> > [email protected]
> > https://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to