aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-01-17 01:08:40 +0100
committerSimon Ser <contact@emersion.fr>2021-01-17 01:08:40 +0100
commitc6c7fccd96b7e2455d2992b1e6f8c0e1df012ded (patch)
treeb5911cb522e2cbd240a271c736299ebd54eeb030
parent9e98f497af38852bdfffa93aa3fe014f6c6a72e4 (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.
-rw-r--r--backend/headless/backend.c18
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);