From: John Sadler <[email protected]>

When running with the RPi backend, Weston now segfaults at startup on the
line:

    flippipe->clk_id = output->base.compositor->presentation_clock;

in `rpi_flippipe_init()`.

This is because `output->base.compositor` is NULL. This problem did not
exist on 1.8.0, and it looks like it may have been introduced by 954f183e2f.

This commit ensures that the `compositor` is initialised in `rpi_backend`
and that flippipe init uses the compositor pointer from backend.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91885

Signed-off-by: John Sadler <[email protected]>

Changes in v2:
- fix summary to not break the build
- use output->backend->compositor in rpi_flippipe_init() instead of
  output->base.compositor. The latter is set by weston_output_init()
  which gets called later than rpi_flippipe_init().

Signed-off-by: Pekka Paalanen <[email protected]>

---
Hi John,

a good find! I adjusted this patch a bit. If you can give a Tested-by
for the v2, I can push this.

Thanks,
pq
---
 src/compositor-rpi.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
index 602cbee..0aeb077 100644
--- a/src/compositor-rpi.c
+++ b/src/compositor-rpi.c
@@ -184,6 +184,7 @@ rpi_flippipe_handler(int fd, uint32_t mask, void *data)
 static int
 rpi_flippipe_init(struct rpi_flippipe *flippipe, struct rpi_output *output)
 {
+       struct weston_compositor *compositor = output->backend->compositor;
        struct wl_event_loop *loop;
        int fd[2];
 
@@ -192,9 +193,9 @@ rpi_flippipe_init(struct rpi_flippipe *flippipe, struct 
rpi_output *output)
 
        flippipe->readfd = fd[0];
        flippipe->writefd = fd[1];
-       flippipe->clk_id = output->base.compositor->presentation_clock;
+       flippipe->clk_id = compositor->presentation_clock;
 
-       loop = wl_display_get_event_loop(output->base.compositor->wl_display);
+       loop = wl_display_get_event_loop(compositor->wl_display);
        flippipe->source = wl_event_loop_add_fd(loop, flippipe->readfd,
                                                WL_EVENT_READABLE,
                                                rpi_flippipe_handler, output);
@@ -498,6 +499,7 @@ rpi_backend_create(struct weston_compositor *compositor,
        backend->base.destroy = rpi_backend_destroy;
        backend->base.restore = rpi_restore;
 
+       backend->compositor = compositor;
        backend->prev_state = WESTON_COMPOSITOR_ACTIVE;
        backend->single_buffer = param->renderer.single_buffer;
 
-- 
2.4.6

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to