On Wed, Dec  7, 2011 at 23:43:13 -0600, David Fries wrote:

> diff -upr /tmp/mesa-7.11/src/egl/drivers/dri2/platform_wayland.c 
> mesa-7.11/src/egl/drivers/dri2/platform_wayland.c
> --- /tmp/mesa-7.11/src/egl/drivers/dri2/platform_wayland.c    2011-07-08 
> 20:37:09.000000000 -0500
> +++ mesa-7.11/src/egl/drivers/dri2/platform_wayland.c 2011-12-07 
> 21:28:10.000000000 -0600
> @@ -734,17 +734,25 @@ drm_handle_device(void *data, struct wl_
>  {
>     struct dri2_egl_display *dri2_dpy = data;
>     drm_magic_t magic;
> +#ifdef O_CLOEXEC
> +   int flags = O_RDWR | O_CLOEXEC;
> +#else
> +   int flags = O_RDWR;
> +#endif
>  
>     dri2_dpy->device_name = strdup(device);
>     if (!dri2_dpy->device_name)
>        return;
>  
> -   dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
> +   dri2_dpy->fd = open(dri2_dpy->device_name, flags);
>     if (dri2_dpy->fd == -1) {
>        _eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
>             dri2_dpy->device_name, strerror(errno));
>        return;
>     }
> +#ifndef O_CLOEXEC
> +   fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) | FD_CLOEXEC);
> +#endif
>  

I'd do something like

#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 >= 0)
          fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) | 
FD_CLOEXEC);
   }
   if (dri2_dpy->fd == -1) {
       _eglLog(...);
       return;

so it still works if the build environment has O_CLOEXEC but the kernel
doesn't support it at runtime.

Cheers,
Julien



-- 
To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20111208193746.gb23...@radis.cristau.org

Reply via email to