> 
> I believe I see the problem.  In 7.9, in gtktreemodel.pre,  function 
> iter_next, 
>
> it was changed to push the iter onto the stack, to  return it.  This way you 
>can 
>
> possibly do things like  iter2=tm->iter_next(iter).  The problem is that iter 
> gets modified  in place by gtk_tree_model_iter_next(), so it is there, then 
> it 

> gets pushed  onto the stack also.  So the same GtkTreeIter is present twice, 
>once 
>
> in  the original object, and another on the stack.  When the one on the stack 
> doesn't get assigned to anything, it gets free'd by gtk, so the original  
> iter 

> gets free'd also.  Then when you try to use it again, possibly the  memory is 
> fine and hasn't been overwritten yet, but when it tries to free it  again, it 
> gets the double free.  7.9 needs to be changed to either copy  the iter, or 
> to 

> not return it.
> 
> Does anybody have a preference?   I don't think the copy would be the right 
>thing 
>
> to do, because it would  usually consist of a copy and a free anyway, because 
>you 
>
> won't probably  won't use the old one once you have the next one.
> 
> I don't think there is  any way to do it otherwise because 
> gtk_tree_model_iter_next() replaces the  iter, it doesn't return the next one 
>as 
>
> a new iter, leaving the old one  alone.
> 

Okay I removed the second push of the GtkTreeIter, and changed it to only 
return 
the status of the call (true if iter was set).  This partially reverts commit 
f439a10a801922cf6cf628352c5b1322cb4aae97.

I just verified that this fixed the problem.

Reply via email to