Module: Mesa
Branch: master
Commit: 0c36aac83252d32dac8c4da2850539bff0b10301
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0c36aac83252d32dac8c4da2850539bff0b10301

Author: Jason Ekstrand <[email protected]>
Date:   Wed Nov  5 13:57:09 2014 -0800

glsl/list: Add an exec_list_validate function

This can be very useful for trying to debug list corruptions.

Signed-off-by: Jason Ekstrand <[email protected]>
Reviewed-by: Matt Turner <[email protected]>

---

 src/glsl/list.h |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/glsl/list.h b/src/glsl/list.h
index b6c32bc..e4b063c 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()
 {

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to