From: Jason Ekstrand Date: Wed, 5 Nov 2014 21:57:09 +0000 (-0800) Subject: glsl/list: Add an exec_list_validate function X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0c36aac83252d32dac8c4da2850539bff0b10301;p=mesa.git 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 --- 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() {