[Mesa-dev] [PATCH v2] nv50: avoid freeing the symbols if they're about to be stored

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Feb 3 20:47:44 UTC 2016



On 02/03/2016 08:00 PM, Ilia Mirkin wrote:
> Spotted by Coverity
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>
> v1 -> v2: forgot to remove the original free...
>
>   src/gallium/drivers/nouveau/nv50/nv50_program.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_program.c b/src/gallium/drivers/nouveau/nv50/nv50_program.c
> index 888d62e..a67ef28 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_program.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_program.c
> @@ -369,7 +369,6 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
>         NOUVEAU_ERR("shader translation failed: %i\n", ret);
>         goto out;
>      }
> -   FREE(info->bin.syms);

I would prefer to be consistent with what nvc0 currently does, so:

if (prog->type != PIPE_SHADER_COMPUTE)
   FREE(info->bin.syms);

And you could remove the below hunk.

>
>      prog->code = info->bin.code;
>      prog->code_size = info->bin.codeSize;
> @@ -403,10 +402,13 @@ nv50_program_translate(struct nv50_program *prog, uint16_t chipset,
>            break;
>         }
>         prog->gp.vert_count = info->prop.gp.maxVertices;
> -   } else
> +   }
> +
>      if (prog->type == PIPE_SHADER_COMPUTE) {
>         prog->cp.syms = info->bin.syms;
>         prog->cp.num_syms = info->bin.numSyms;
> +   } else {
> +      FREE(info->bin.syms);
>      }
>
>      if (prog->pipe.stream_output.num_outputs)
> @@ -507,6 +509,9 @@ nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p)
>      FREE(p->interps);
>      FREE(p->so);
>
> +   if (type == PIPE_SHADER_COMPUTE)
> +      FREE(p->cp.syms);
> +
>      memset(p, 0, sizeof(*p));
>
>      p->pipe = pipe;
>


More information about the mesa-dev mailing list