aboutsummaryrefslogtreecommitdiff
path: root/backend/backend.c
diff options
context:
space:
mode:
authorAnthony Super <anthony@noided.media>2021-10-17 15:38:53 -0600
committerSimon Ser <contact@emersion.fr>2021-10-18 14:36:04 +0200
commite22a38631924d5a5678c11c86ec0b6c5a84fb0e5 (patch)
tree7610b3640f911d2ffe6c69c77b560db947d9e60d /backend/backend.c
parent8e346922508aa3eaccd6e12f2917f6574f349843 (diff)
Add error handling to backend creation
This commit adds two error-handling cases to the function attempt_dmr_backend. Specifically: - In the case where the number of found GPUs is zero, we now print a log message indicating this and return a NULL pointer - In the case where we could not successfully create a backend on any GPU, we now log a message indicating this and return a NULL pointer This allows us to provide more descriptive error messages, as well as avoid a SEGFAULT (the function `ensure_primary_backend_renderer_and_allocator` dereferences the pointer given, which could be NULL until this patch) when these cases arise.
Diffstat (limited to 'backend/backend.c')
-rw-r--r--backend/backend.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/backend/backend.c b/backend/backend.c
index ed6ae2d6..9d40c54f 100644
--- a/backend/backend.c
+++ b/backend/backend.c
@@ -293,7 +293,12 @@ static struct wlr_backend *attempt_drm_backend(struct wl_display *display,
return NULL;
}
- wlr_log(WLR_INFO, "Found %zu GPUs", num_gpus);
+ if (num_gpus == 0) {
+ wlr_log(WLR_ERROR, "Found 0 GPUs, cannot create backend");
+ return NULL;
+ } else {
+ wlr_log(WLR_INFO, "Found %zu GPUs", num_gpus);
+ }
struct wlr_backend *primary_drm = NULL;
for (size_t i = 0; i < (size_t)num_gpus; ++i) {
@@ -310,6 +315,10 @@ static struct wlr_backend *attempt_drm_backend(struct wl_display *display,
wlr_multi_backend_add(backend, drm);
}
+ if (!primary_drm) {
+ wlr_log(WLR_ERROR, "Could not successfully create backend on any GPU");
+ return NULL;
+ }
return ensure_backend_renderer_and_allocator(primary_drm);
}