trace: add context pointer sanity checking

To help catch mixed up context pointer bugs in the future, add a
trace_context_check() function and some new assertions.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
Brian Paul 2013-02-15 10:42:32 -07:00
parent 82d62cf04f
commit 2ef530cf68
3 changed files with 23 additions and 0 deletions

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);