diff options
author | Simon Ser <contact@emersion.fr> | 2021-01-17 01:08:40 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2021-01-17 01:08:40 +0100 |
commit | c6c7fccd96b7e2455d2992b1e6f8c0e1df012ded (patch) | |
tree | b5911cb522e2cbd240a271c736299ebd54eeb030 /backend/headless | |
parent | 9e98f497af38852bdfffa93aa3fe014f6c6a72e4 (diff) |
backend/headless: create renderer after wlr_backend_init
We were calling wlr_renderer_autocreate before wlr_backend_init,
which caused a NULL dereference on wlr_backend.impl.
Diffstat (limited to 'backend/headless')
-rw-r--r-- | backend/headless/backend.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/backend/headless/backend.c b/backend/headless/backend.c index 02e3774a..ba5fde80 100644 --- a/backend/headless/backend.c +++ b/backend/headless/backend.c @@ -120,6 +120,14 @@ static bool backend_init(struct wlr_headless_backend *backend, wl_list_init(&backend->input_devices); backend->allocator = allocator; + + if (renderer == NULL) { + renderer = wlr_renderer_autocreate(&backend->backend); + if (!renderer) { + wlr_log(WLR_ERROR, "Failed to create renderer"); + return false; + } + } backend->renderer = renderer; const struct wlr_drm_format_set *formats = @@ -219,21 +227,13 @@ struct wlr_backend *wlr_headless_backend_create(struct wl_display *display) { goto error_dup; } - struct wlr_renderer *renderer = wlr_renderer_autocreate(&backend->backend); - if (!renderer) { - wlr_log(WLR_ERROR, "Failed to create renderer"); - goto error_renderer; - } - - if (!backend_init(backend, display, &gbm_alloc->base, renderer)) { + if (!backend_init(backend, display, &gbm_alloc->base, NULL)) { goto error_init; } return &backend->backend; error_init: - wlr_renderer_destroy(renderer); -error_renderer: wlr_allocator_destroy(&gbm_alloc->base); error_dup: close(backend->drm_fd); |