diff options
Diffstat (limited to 'src/gallium/state_trackers/xa')
-rw-r--r-- | src/gallium/state_trackers/xa/xa_tracker.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c index faa630c144b..d57464b7d60 100644 --- a/src/gallium/state_trackers/xa/xa_tracker.c +++ b/src/gallium/state_trackers/xa/xa_tracker.c @@ -152,11 +152,15 @@ xa_tracker_create(int drm_fd) struct xa_tracker *xa = calloc(1, sizeof(struct xa_tracker)); enum xa_surface_type stype; unsigned int num_formats; + int fd = -1; if (!xa) return NULL; - if (pipe_loader_drm_probe_fd(&xa->dev, dup(drm_fd))) + if (drm_fd < 0 || (fd = dup(drm_fd)) < 0) + goto out_no_fd; + + if (pipe_loader_drm_probe_fd(&xa->dev, fd)) xa->screen = pipe_loader_create_screen(xa->dev); if (!xa->screen) @@ -208,6 +212,9 @@ xa_tracker_create(int drm_fd) out_no_screen: if (xa->dev) pipe_loader_release(&xa->dev, 1); + fd = -1; + out_no_fd: + close(fd); free(xa); return NULL; } |