diff options
author | Emil Velikov <[email protected]> | 2015-11-23 20:26:57 +0000 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2015-11-29 14:39:51 +0000 |
commit | fe71059388ebb797255d5d5f7191f300343c6e3c (patch) | |
tree | 3059302ef6baa03dd824b7c15d9b5936774b18f9 | |
parent | d90ba57c08dc51579c92224c7eedfc9f88f47853 (diff) |
st/xa: fd management cleanups
Analogous to previous commit.
Spotted by Coverity (CID 1339866)
Cc: [email protected]
Signed-off-by: Emil Velikov <[email protected]>
-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; } |