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.
This commit is contained in:
parent
9e98f497af
commit
c6c7fccd96
|
@ -120,6 +120,14 @@ static bool backend_init(struct wlr_headless_backend *backend,
|
||||||
wl_list_init(&backend->input_devices);
|
wl_list_init(&backend->input_devices);
|
||||||
|
|
||||||
backend->allocator = allocator;
|
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;
|
backend->renderer = renderer;
|
||||||
|
|
||||||
const struct wlr_drm_format_set *formats =
|
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;
|
goto error_dup;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_renderer *renderer = wlr_renderer_autocreate(&backend->backend);
|
if (!backend_init(backend, display, &gbm_alloc->base, NULL)) {
|
||||||
if (!renderer) {
|
|
||||||
wlr_log(WLR_ERROR, "Failed to create renderer");
|
|
||||||
goto error_renderer;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!backend_init(backend, display, &gbm_alloc->base, renderer)) {
|
|
||||||
goto error_init;
|
goto error_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &backend->backend;
|
return &backend->backend;
|
||||||
|
|
||||||
error_init:
|
error_init:
|
||||||
wlr_renderer_destroy(renderer);
|
|
||||||
error_renderer:
|
|
||||||
wlr_allocator_destroy(&gbm_alloc->base);
|
wlr_allocator_destroy(&gbm_alloc->base);
|
||||||
error_dup:
|
error_dup:
|
||||||
close(backend->drm_fd);
|
close(backend->drm_fd);
|
||||||
|
|
Loading…
Reference in New Issue