diff options
author | David Fries <[email protected]> | 2011-12-10 11:28:45 -0600 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2012-03-11 19:05:50 +0000 |
commit | b60120608f6ddf4098bc324363197c979ee04cb7 (patch) | |
tree | f3757427a0e19359662ede905bfb90359f5fec2d /src/gallium/state_trackers/egl/x11 | |
parent | 5ea18503e757ceeb9eba32a72fdf02b7bc710275 (diff) |
Set close on exec flag FD_CLOEXEC
Set the close on exec flag when opening dri character devices, so they
will be closed and free any resouces allocated in exec.
Signed-off-by: David Fries <[email protected]>
Reviewed-by: Adam Jackson <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/egl/x11')
-rw-r--r-- | src/gallium/state_trackers/egl/x11/x11_screen.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/egl/x11/x11_screen.c b/src/gallium/state_trackers/egl/x11/x11_screen.c index 1e20f941c81..f8f9e2ae767 100644 --- a/src/gallium/state_trackers/egl/x11/x11_screen.c +++ b/src/gallium/state_trackers/egl/x11/x11_screen.c @@ -265,7 +265,15 @@ x11_screen_enable_dri2(struct x11_screen *xscr, if (!x11_screen_probe_dri2(xscr, NULL, NULL)) return -1; - fd = open(xscr->dri_device, O_RDWR); +#ifdef O_CLOEXEC + fd = open(xscr->dri_device, O_RDWR | O_CLOEXEC); + if (fd == -1 && errno == EINVAL) +#endif + { + fd = open(xscr->dri_device, O_RDWR); + if (fd != -1) + fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); + } if (fd < 0) { _eglLog(_EGL_WARNING, "failed to open %s", xscr->dri_device); return -1; |