aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/renderer.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/drm/renderer.c')
-rw-r--r--backend/drm/renderer.c11
1 files changed, 10 insertions, 1 deletions
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 <assert.h>
#include <drm_fourcc.h>
+#include <fcntl.h>
#include <gbm.h>
#include <stdbool.h>
#include <stdlib.h>
@@ -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;
}