[Mesa-dev] [PATCH 2/2] trace: add context pointer sanity checking

Jose Fonseca jfonseca at vmware.com
Fri Feb 15 10:04:00 PST 2013


Both patches look great to me.

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>


----- Original Message -----
> To help catch mixed up context pointer bugs in the future, add a
> trace_context_check() function and some new assertions.
> ---
>  src/gallium/drivers/trace/tr_context.c |   15 +++++++++++++++
>  src/gallium/drivers/trace/tr_context.h |    7 +++++++
>  src/gallium/drivers/trace/tr_texture.c |    1 +
>  3 files changed, 23 insertions(+), 0 deletions(-)
> 
> diff --git a/src/gallium/drivers/trace/tr_context.c
> b/src/gallium/drivers/trace/tr_context.c
> index b88f379..538ff4a 100644
> --- a/src/gallium/drivers/trace/tr_context.c
> +++ b/src/gallium/drivers/trace/tr_context.c
> @@ -852,6 +852,8 @@ trace_context_sampler_view_destroy(struct pipe_context
> *_pipe,
>     struct pipe_context *pipe = tr_ctx->pipe;
>     struct pipe_sampler_view *view = tr_view->sampler_view;
>  
> +   assert(_view->context == _pipe);
> +
>     trace_dump_call_begin("pipe_context", "sampler_view_destroy");
>  
>     trace_dump_arg(ptr, pipe);
> @@ -1610,3 +1612,16 @@ trace_context_create(struct trace_screen *tr_scr,
>  error1:
>     return pipe;
>  }
> +
> +
> +/**
> + * Sanity checker: check that the given context really is a
> + * trace context (and not the wrapped driver's context).
> + */
> +void
> +trace_context_check(const struct pipe_context *pipe)
> +{
> +   struct trace_context *tr_ctx = (struct trace_context *) pipe;
> +   assert(tr_ctx->base.destroy == trace_context_destroy);
> +}
> +
> diff --git a/src/gallium/drivers/trace/tr_context.h
> b/src/gallium/drivers/trace/tr_context.h
> index dadbe56..90883d7 100644
> --- a/src/gallium/drivers/trace/tr_context.h
> +++ b/src/gallium/drivers/trace/tr_context.h
> @@ -50,10 +50,17 @@ struct trace_context
>  };
>  
>  
> +void
> +trace_context_check(const struct pipe_context *pipe);
> +
> +
>  static INLINE struct trace_context *
>  trace_context(struct pipe_context *pipe)
>  {
>     assert(pipe);
> +#ifdef DEBUG
> +   trace_context_check(pipe);
> +#endif
>     return (struct trace_context *)pipe;
>  }
>  
> diff --git a/src/gallium/drivers/trace/tr_texture.c
> b/src/gallium/drivers/trace/tr_texture.c
> index aae1338..f6bc386 100644
> --- a/src/gallium/drivers/trace/tr_texture.c
> +++ b/src/gallium/drivers/trace/tr_texture.c
> @@ -108,6 +108,7 @@ error:
>  void
>  trace_surf_destroy(struct trace_surface *tr_surf)
>  {
> +   trace_context_check(tr_surf->base.context);
>     pipe_resource_reference(&tr_surf->base.texture, NULL);
>     pipe_surface_reference(&tr_surf->surface, NULL);
>     FREE(tr_surf);
> --
> 1.7.3.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list