summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Sadler <deathofathousandpapercuts@gmail.com>2015-09-05 15:01:38 +0100
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2015-09-10 10:45:03 +0300
commitca510d06dca3e47e434a50cee105e96c9e82599c (patch)
tree79261df31b11df86078c5f8279370ecea55babae
parent7978bc82dd056933a3998c54d9a7bd43cecae19f (diff)
downloadweston-ca510d06dca3e47e434a50cee105e96c9e82599c.tar.gz
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>
-rw-r--r--src/compositor-rpi.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
index 5d7f41d6..83c01b46 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;