diff options
author | Simon Ser <contact@emersion.fr> | 2020-12-15 20:52:53 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2020-12-15 20:52:53 +0100 |
commit | 87bd718de54ced41544e88200418bc091a1fce50 (patch) | |
tree | 4b2b1427f5e3050070e2b88a75f10868c9bf58f9 /backend/headless | |
parent | 1ca4d6b0296ad23a59ad30fbc9063fa93b94b5fe (diff) |
backend: use fcntl(F_DUPFD_CLOEXEC) instead of dup
This makes sure the CLOEXEC flag is set on the dup'ed FD.
Diffstat (limited to 'backend/headless')
-rw-r--r-- | backend/headless/backend.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/backend/headless/backend.c b/backend/headless/backend.c index 3995d1eb..c6c2d0f9 100644 --- a/backend/headless/backend.c +++ b/backend/headless/backend.c @@ -1,6 +1,7 @@ #define _POSIX_C_SOURCE 200809L #include <assert.h> #include <drm_fourcc.h> +#include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <wlr/interfaces/wlr_input_device.h> @@ -113,19 +114,19 @@ static bool backend_init(struct wlr_headless_backend *backend, backend->renderer = renderer; backend->egl = wlr_gles2_renderer_get_egl(renderer); - int fd = wlr_renderer_get_drm_fd(renderer); - if (fd < 0) { + int drm_fd = wlr_renderer_get_drm_fd(renderer); + if (drm_fd < 0) { wlr_log(WLR_ERROR, "Failed to get DRM device FD from renderer"); return false; } - fd = dup(fd); - if (fd < 0) { - wlr_log_errno(WLR_ERROR, "dup failed"); + drm_fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0); + if (drm_fd < 0) { + wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); return false; } - struct wlr_gbm_allocator *alloc = wlr_gbm_allocator_create(fd); + struct wlr_gbm_allocator *alloc = wlr_gbm_allocator_create(drm_fd); if (alloc == NULL) { wlr_log(WLR_ERROR, "Failed to create GBM allocator"); return false; |