[Mesa-dev] [PATCH] glsl/list: Add an exec_list_validate function
Matt Turner
mattst88 at gmail.com
Wed Nov 5 14:46:52 PST 2014
On Wed, Nov 5, 2014 at 2:00 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> This can be very useful for trying to debug list corruptions.
>
> Signed-off-by: Jason Ekstrand <jason.ekstrand at intel.com>
> Cc: Ian Romanick <idr at freedesktop.org>
> ---
> src/glsl/list.h | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/src/glsl/list.h b/src/glsl/list.h
> index aac13fd..1d18ec9 100644
> --- a/src/glsl/list.h
> +++ b/src/glsl/list.h
> @@ -521,6 +521,20 @@ exec_node_insert_list_before(struct exec_node *n, struct exec_list *before)
> exec_list_make_empty(before);
> }
>
> +static inline void
> +exec_list_validate(struct exec_list *list)
> +{
> + assert(list->head->prev == (struct exec_node *) &list->head);
> + assert(list->tail == NULL);
> + assert(list->tail_pred->next == (struct exec_node *) &list->tail);
> +
> + for (struct exec_node *node = list->head;
> + node->next != NULL; node = node->next) {
Just use foreach_in_list().
> + assert(node->next->prev == node);
> + assert(node->prev->next == node);
> + }
> +}
Are you intending to call this from gdb? I'm having a hard time
imagining committing code that *sometimes* corrupts lists, which seems
like why this function would be useful to call from real code.
If you just want to call it from gdb, wrap the whole thing in #ifndef
NDEBUG. I don't want to ever accidentally call this function and think
it validated something when it actually did nothing.
More information about the mesa-dev
mailing list