backend/headless: dup DRM FD in wlr_headless_backend_create_with_renderer

We were not dup'ing the DRM FD coming from wlr_renderer_get_drm_fd,
resulting in a double-close on backend destroy.
This commit is contained in:
Simon Ser 2021-04-29 09:12:45 +02:00 committed by Kenny Levinsen
parent a1e8a639b3
commit c85789a3a9
1 changed files with 9 additions and 3 deletions

View File

@ -248,9 +248,15 @@ struct wlr_backend *wlr_headless_backend_create_with_renderer(
} }
backend->has_parent_renderer = true; backend->has_parent_renderer = true;
backend->drm_fd = wlr_renderer_get_drm_fd(renderer); int drm_fd = wlr_renderer_get_drm_fd(renderer);
if (drm_fd < 0) {
wlr_log(WLR_ERROR, "Failed to get DRM device FD from parent renderer");
backend->drm_fd = -1;
} else {
backend->drm_fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0);
if (backend->drm_fd < 0) { if (backend->drm_fd < 0) {
wlr_log(WLR_ERROR, "Failed to get DRM device FD from renderer"); wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed");
}
} }
if (!backend_init(backend, display, renderer)) { if (!backend_init(backend, display, renderer)) {