rpi: fix segfault at startup in rpi_flippipe_init() v2
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 <deathofathousandpapercuts@gmail.com>
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 <pekka.paalanen@collabora.co.uk>
Tested-by: John Sadler <deathofathousandpapercuts@gmail.com>
This commit is contained in:
parent
7978bc82dd
commit
ca510d06dc
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user