I just tried the below code which is much cleaner but it to causes the original list to lose the last node.
exec_node *node = type->array_specifier->array_dimensions.head->next; for (/* nothing */; !node->is_tail_sentinel(); node = node->next) { array_specifier->array_dimensions.push_tail(node); } I originally thought the pointer was being freed by an access to the copied list somewhere but since foreach_list_safe makes things work there must be something else happening. On Sun, 2014-01-12 at 19:08 +1100, Timothy Arceri wrote: > Hi Guys, > > I've been chasing my tail most of the afternoon using exec_list > basically I was just trying to copy all but the first element from one > list to another using the code bellow. > > exec_list *copy_dims = > &type->array_specifier->array_dimensions; > int i = 0; > //TODO: has to be better way to copy all dimension but the > first one > foreach_list (node, copy_dims) { > if(i>0) > array_specifier->array_dimensions.push_tail(node); > i++; > } > > But when doing this the last element from the list I was coping FROM was > somehow being lost. > > Replacing foreach_list with foreach_list_safe seems to have fixed the > problem. However I don't really understand why is someone able to > explain to me what's happening here? > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev