egl: Use the loader_open_device() helper to do open with CLOEXEC
We've moved the open with CLOEXEC idiom into a helper function, so call it instead of duplicating the code. This also replaces a couple of opens that didn't properly do CLOEXEC. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
This commit is contained in:
parent
324ee9b391
commit
4f8f790525
|
@ -611,9 +611,9 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
char buf[64];
|
||||
int n = snprintf(buf, sizeof(buf), DRM_DEV_NAME, DRM_DIR_NAME, 0);
|
||||
if (n != -1 && n < sizeof(buf))
|
||||
fd = open(buf, O_RDWR);
|
||||
fd = loader_open_device(buf);
|
||||
if (fd < 0)
|
||||
fd = open("/dev/dri/card0", O_RDWR);
|
||||
fd = loader_open_device("/dev/dri/card0");
|
||||
dri2_dpy->own_device = 1;
|
||||
gbm = gbm_create_device(fd);
|
||||
if (gbm == NULL)
|
||||
|
|
|
@ -97,16 +97,7 @@ dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
if (asprintf(&card_path, DRM_RENDER_DEV_NAME, DRM_DIR_NAME, base + i) < 0)
|
||||
continue;
|
||||
|
||||
#ifdef O_CLOEXEC
|
||||
dri2_dpy->fd = open(card_path, O_RDWR | O_CLOEXEC);
|
||||
if (dri2_dpy->fd < 0 && errno == EINVAL)
|
||||
#endif
|
||||
{
|
||||
dri2_dpy->fd = open(card_path, O_RDWR);
|
||||
if (dri2_dpy->fd >= 0)
|
||||
fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) |
|
||||
FD_CLOEXEC);
|
||||
}
|
||||
dri2_dpy->fd = loader_open_device(card_path);
|
||||
|
||||
free(card_path);
|
||||
if (dri2_dpy->fd < 0)
|
||||
|
|
|
@ -891,16 +891,7 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
|
|||
if (!dri2_dpy->device_name)
|
||||
return;
|
||||
|
||||
#ifdef O_CLOEXEC
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC);
|
||||
if (dri2_dpy->fd == -1 && errno == EINVAL)
|
||||
#endif
|
||||
{
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
|
||||
if (dri2_dpy->fd != -1)
|
||||
fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) |
|
||||
FD_CLOEXEC);
|
||||
}
|
||||
dri2_dpy->fd = loader_open_device(dri2_dpy->device_name);
|
||||
if (dri2_dpy->fd == -1) {
|
||||
_eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
|
||||
dri2_dpy->device_name, strerror(errno));
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
|
||||
#include "egl_dri2.h"
|
||||
#include "egl_dri2_fallbacks.h"
|
||||
#include "loader.h"
|
||||
|
||||
static EGLBoolean
|
||||
dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf,
|
||||
|
@ -1230,16 +1231,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
if (!dri2_load_driver(disp))
|
||||
goto cleanup_conn;
|
||||
|
||||
#ifdef O_CLOEXEC
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC);
|
||||
if (dri2_dpy->fd == -1 && errno == EINVAL)
|
||||
#endif
|
||||
{
|
||||
dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
|
||||
if (dri2_dpy->fd != -1)
|
||||
fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) |
|
||||
FD_CLOEXEC);
|
||||
}
|
||||
dri2_dpy->fd = loader_open_device(dri2_dpy->device_name);
|
||||
if (dri2_dpy->fd == -1) {
|
||||
_eglLog(_EGL_WARNING,
|
||||
"DRI2: could not open %s (%s)", dri2_dpy->device_name,
|
||||
|
|
Loading…
Reference in New Issue