From 0c36aac83252d32dac8c4da2850539bff0b10301 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 5 Nov 2014 13:57:09 -0800 Subject: [PATCH] glsl/list: Add an exec_list_validate function This can be very useful for trying to debug list corruptions. Signed-off-by: Jason Ekstrand Reviewed-by: Matt Turner --- src/glsl/list.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/glsl/list.h b/src/glsl/list.h index b6c32bcccaf..e4b063cab58 100644 --- a/src/glsl/list.h +++ b/src/glsl/list.h @@ -521,6 +521,25 @@ exec_node_insert_list_before(struct exec_node *n, struct exec_list *before) exec_list_make_empty(before); } +static inline void +exec_list_validate(const struct exec_list *list) +{ + assert(list->head->prev == (const struct exec_node *) &list->head); + assert(list->tail == NULL); + assert(list->tail_pred->next == (const struct exec_node *) &list->tail); + + /* We could try to use one of the interators below for this but they all + * either require C++ or assume the exec_node is embedded in a structure + * which is not the case for this function. + */ + for (const struct exec_node *node = exec_list_get_head_const(list); + !exec_node_is_tail_sentinel(node); + node = exec_node_get_next_const(node)) { + assert(node->next->prev == node); + assert(node->prev->next == node); + } +} + #ifdef __cplusplus inline void exec_list::make_empty() { -- 2.30.2