backend/drm: dup FD before wlr_gbm_allocator_create

The GBM allocator takes ownership of the DRM FD.
This commit is contained in:
Simon Ser 2020-12-15 20:49:28 +01:00
parent 3fd8098881
commit 1ca4d6b029
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48

View file

@ -1,5 +1,7 @@
#define _POSIX_C_SOURCE 200809L
#include <assert.h> #include <assert.h>
#include <drm_fourcc.h> #include <drm_fourcc.h>
#include <fcntl.h>
#include <gbm.h> #include <gbm.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
@ -37,9 +39,16 @@ bool init_drm_renderer(struct wlr_drm_backend *drm,
goto error_gbm; 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) { if (renderer->allocator == NULL) {
wlr_log(WLR_ERROR, "Failed to create allocator"); wlr_log(WLR_ERROR, "Failed to create allocator");
close(alloc_fd);
goto error_wlr_rend; goto error_wlr_rend;
} }