On Tue, Mar 10, 2015 at 10:54 PM, Ian Romanick <i...@freedesktop.org> wrote:
> On 03/09/2015 06:36 PM, Kenneth Graunke wrote:
>> From: Jason Ekstrand <jason.ekstr...@intel.com>
>>
>> __next and __prev are pointers to the structure containing the exec_node
>> link, not the embedded exec_node.  NULL checks would fail unless the
>> embedded exec_node happened to be at offset 0 in the parent struct.
>
> Wait... what?  That is 100% wrong.  They are pointers to the exec_node,
> or every assumption of the list structure (like checking for the end of
> the list) breaks.

No, this is the foreach_list_safe code so __next is the user-specified
variable pointing to the structure containing the next exec_node. Look
at the code below the change, where we say "__next =
exec_node_data(__type, (__next)->__field.next, __field))"

>
>> Signed-off-by: Jason Ekstrand <jason.ekstr...@intel.com>
>> Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>
>> ---
>>  src/glsl/list.h | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/glsl/list.h b/src/glsl/list.h
>> index ddb98f7..680e963 100644
>> --- a/src/glsl/list.h
>> +++ b/src/glsl/list.h
>> @@ -684,7 +684,7 @@ inline void exec_node::insert_before(exec_list *before)
>>             exec_node_data(__type, (__list)->head, __field),                \
>>                 * __next =                                                  \
>>             exec_node_data(__type, (__node)->__field.next, __field);        \
>> -        __next != NULL;                                                    \
>> +        &__next->__field != NULL;                                          \
>>          __node = __next, __next =                                          \
>>             exec_node_data(__type, (__next)->__field.next, __field))
>>
>> @@ -693,7 +693,7 @@ inline void exec_node::insert_before(exec_list *before)
>>             exec_node_data(__type, (__list)->tail_pred, __field),           \
>>                 * __prev =                                                  \
>>             exec_node_data(__type, (__node)->__field.prev, __field);        \
>> -        __prev != NULL;                                                    \
>> +        &__prev->__field != NULL;                                          \
>>          __node = __prev, __prev =                                          \
>>             exec_node_data(__type, (__prev)->__field.prev, __field))
>>
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to