[Mesa-dev] [PATCH v2 1/2] egl/dri2: Close file descriptor on error.
Ian Romanick
idr at freedesktop.org
Tue Sep 8 17:43:21 PDT 2015
On 09/07/2015 01:58 AM, Emil Velikov wrote:
> From: Matt Turner <mattst88 at gmail.com>
>
> v2: [Emil Velikov]
> Rework the error path to a common goto, close only if we own the fd.
>
> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
> ---
> src/egl/drivers/dri2/platform_drm.c | 27 ++++++++++++++-------------
> 1 file changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
> index eda5087..e8fe7ea 100644
> --- a/src/egl/drivers/dri2/platform_drm.c
> +++ b/src/egl/drivers/dri2/platform_drm.c
> @@ -623,26 +623,20 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
> dri2_dpy->own_device = 1;
> gbm = gbm_create_device(fd);
> if (gbm == NULL)
> - return EGL_FALSE;
> + goto cleanup;
> }
>
> - if (strcmp(gbm_device_get_backend_name(gbm), "drm") != 0) {
> - free(dri2_dpy);
> - return EGL_FALSE;
> - }
> + if (strcmp(gbm_device_get_backend_name(gbm), "drm") != 0)
> + goto cleanup;
>
> dri2_dpy->gbm_dri = gbm_dri_device(gbm);
> - if (dri2_dpy->gbm_dri->base.type != GBM_DRM_DRIVER_TYPE_DRI) {
> - free(dri2_dpy);
> - return EGL_FALSE;
> - }
> + if (dri2_dpy->gbm_dri->base.type != GBM_DRM_DRIVER_TYPE_DRI)
> + goto cleanup;
>
> if (fd < 0) {
> fd = fcntl(gbm_device_get_fd(gbm), F_DUPFD_CLOEXEC, 3);
> - if (fd < 0) {
> - free(dri2_dpy);
> - return EGL_FALSE;
> - }
> + if (fd < 0)
> + goto cleanup;
Shouldn't this fd also get closed eventually? If we decide to catch
other failures (e.g., memory allocation failures) later in this function?
> }
>
> dri2_dpy->fd = fd;
> @@ -727,4 +721,11 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
> dri2_dpy->vtbl = &dri2_drm_display_vtbl;
>
> return EGL_TRUE;
> +
> +cleanup:
> + if (dri2_dpy->own_device)
> + close(fd);
> +
> + free(dri2_dpy);
> + return EGL_FALSE;
> }
>
More information about the mesa-dev
mailing list