From 55138dbe0eefb37a052036500406e45423e3639a Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Sat, 13 Apr 2024 10:01:30 +0200 Subject: [PATCH] server: don't create headless backend twice This may happen when running with WLR_BACKENDS=headless. Fixes: #1618 --- src/server.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/server.c b/src/server.c index ceac9cec..4210f069 100644 --- a/src/server.c +++ b/src/server.c @@ -278,6 +278,15 @@ static const char helpful_seat_error_message[] = "If the above does not work, try running with `WLR_RENDERER=pixman labwc` in\n" "order to use the software rendering fallback\n"; +static void +get_headless_backend(struct wlr_backend *backend, void *data) +{ + if (wlr_backend_is_headless(backend)) { + struct wlr_backend **headless = data; + *headless = backend; + } +} + void server_init(struct server *server) { @@ -327,7 +336,16 @@ server_init(struct server *server) } /* Create headless backend to enable adding virtual outputs later on */ - server->headless.backend = wlr_headless_backend_create(server->wl_display); + wlr_multi_for_each_backend(server->backend, + get_headless_backend, &server->headless.backend); + + if (!server->headless.backend) { + wlr_log(WLR_DEBUG, "manually creating headless backend"); + server->headless.backend = wlr_headless_backend_create(server->wl_display); + } else { + wlr_log(WLR_DEBUG, "headless backend already exists"); + } + if (!server->headless.backend) { wlr_log(WLR_ERROR, "unable to create headless backend"); exit(EXIT_FAILURE); -- 2.52.0