pipe-loader: move dup(fd) within pipe_loader_drm_probe_fd
[mesa.git] / src / gallium / auxiliary / vl / vl_winsys_drm.c
index ebde5b8cb6359b9f17bf1e095cb55cb647a90708..94eb6d74ee71643a24a0d700fb6e68ad22e29df3 100644 (file)
@@ -26,7 +26,6 @@
  **************************************************************************/
 
 #include <assert.h>
-#include <fcntl.h>
 
 #include "pipe/p_screen.h"
 #include "pipe-loader/pipe_loader.h"
@@ -48,11 +47,8 @@ vl_drm_screen_create(int fd)
    if (!vscreen)
       return NULL;
 
-   if (fd < 0 || (new_fd = fcntl(fd, F_DUPFD_CLOEXEC, 3)) < 0)
-      goto free_screen;
-
-   if (pipe_loader_drm_probe_fd(&vscreen->dev, new_fd))
-      vscreen->pscreen = pipe_loader_create_screen(vscreen->dev, 0);
+   if (pipe_loader_drm_probe_fd(&vscreen->dev, fd))
+      vscreen->pscreen = pipe_loader_create_screen(vscreen->dev);
 
    if (!vscreen->pscreen)
       goto release_pipe;
@@ -68,10 +64,7 @@ vl_drm_screen_create(int fd)
 release_pipe:
    if (vscreen->dev)
       pipe_loader_release(&vscreen->dev, 1);
-   else
-      close(new_fd);
 
-free_screen:
    FREE(vscreen);
    return NULL;
 }
@@ -83,5 +76,6 @@ vl_drm_screen_destroy(struct vl_screen *vscreen)
 
    vscreen->pscreen->destroy(vscreen->pscreen);
    pipe_loader_release(&vscreen->dev, 1);
+   /* CHECK: The VAAPI loader/user preserves ownership of the original fd */
    FREE(vscreen);
 }