From 1ca4d6b0296ad23a59ad30fbc9063fa93b94b5fe Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 15 Dec 2020 20:49:28 +0100 Subject: backend/drm: dup FD before wlr_gbm_allocator_create The GBM allocator takes ownership of the DRM FD. --- backend/drm/renderer.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'backend/drm') diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c index 79add1ba..7599623a 100644 --- a/backend/drm/renderer.c +++ b/backend/drm/renderer.c @@ -1,5 +1,7 @@ +#define _POSIX_C_SOURCE 200809L #include #include +#include #include #include #include @@ -37,9 +39,16 @@ bool init_drm_renderer(struct wlr_drm_backend *drm, goto error_gbm; } - renderer->allocator = wlr_gbm_allocator_create(drm->fd); + int alloc_fd = fcntl(drm->fd, F_DUPFD_CLOEXEC, 0); + if (alloc_fd < 0) { + wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); + goto error_wlr_rend; + } + + renderer->allocator = wlr_gbm_allocator_create(alloc_fd); if (renderer->allocator == NULL) { wlr_log(WLR_ERROR, "Failed to create allocator"); + close(alloc_fd); goto error_wlr_rend; } -- cgit v1.2.3