[Mesa-stable] [PATCH 07/10] gbm: unify error handling in gbm_dri_bo_import()
Andres Gomez
agomez at igalia.com
Thu Aug 9 12:53:51 UTC 2018
Emil, this patch never landed in master (nor got a R-b).
Is this still relevant? Could you manage to get somebody to review it?
I'd do it myself but I'm quite ignorant on the GBM bits.
On Mon, 2017-10-16 at 17:04 +0100, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at 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-stable at lists.freedesktop.org
> Signed-off-by: Emil Velikov <emil.velikov at 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) {
--
Br,
Andres
More information about the mesa-stable
mailing list