From: Emil Velikov <emil.veli...@collabora.com> Fold the error handling for image creation/duplication in a single place.
Effectively providing the same errno across the board and plugging a memory leak in the GBM_BO_IMPORT_WL_BUFFER case. Cc: mesa-sta...@lists.freedesktop.org Signed-off-by: Emil Velikov <emil.veli...@collabora.com> --- src/gbm/backends/dri/gbm_dri.c | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index d7cf01fc6b4..c39ee9c9a53 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -888,9 +888,9 @@ gbm_dri_bo_import(struct gbm_device *gbm, { struct gbm_dri_device *dri = gbm_dri_device(gbm); struct gbm_dri_bo *bo; - __DRIimage *image; + __DRIimage *image = NULL; unsigned dri_use = 0; - int gbm_format; + int gbm_format = 0; unsigned query; /* EGLBoolean, but we cannot include the header */ if (dri->image == NULL) { @@ -935,17 +935,9 @@ gbm_dri_bo_import(struct gbm_device *gbm, image = dri->lookup_image(dri->screen, buffer, dri->lookup_user_data); image = dri->image->dupImage(image, NULL); query = dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT, &dri_format); - if (!query) { - errno = EINVAL; - dri->image->destroyImage(image); + if (!query) break; - } gbm_format = gbm_dri_to_gbm_format(dri_format); - if (gbm_format == 0) { - errno = EINVAL; - dri->image->destroyImage(image); - return NULL; - } break; } @@ -973,10 +965,6 @@ gbm_dri_bo_import(struct gbm_device *gbm, &fd_data->fd, 1, &stride, &offset, NULL); - if (image == NULL) { - errno = EINVAL; - return NULL; - } gbm_format = fd_data->format; break; } @@ -1008,20 +996,23 @@ gbm_dri_bo_import(struct gbm_device *gbm, fd_data->offsets, 0, 0, 0, 0, &error, NULL); - if (image == NULL) { - errno = ENOSYS; - return NULL; - } - gbm_format = fourcc; break; } default: - errno = ENOSYS; - return NULL; + break; } + if (image == NULL) { + errno = EINVAL; + return NULL; + } + if (gbm_format == 0) { + errno = EINVAL; + dri->image->destroyImage(image); + return NULL; + } bo = calloc(1, sizeof *bo); if (bo == NULL) { -- 2.14.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev