[Gambas-devel] Undead enumerators?

Benoît Minisini gambas at ...1...
Sun Jul 21 01:59:12 CEST 2013


Le 13/07/2013 10:56, Tobias Boege a écrit :
> Hi Benoit,
>
> I may have reported this earlier but now you can see it yourself and with a
> bit more output.
>
> In gb.data I have to iterate over List.Current and all active enumerators
> when the list structure changes, i.e. elements are added or removed, in
> order to update their information.
>
> I use GB.BeginEnum(), .NextEnum(), .GetEnum() and .EndEnum() to do this
> (it's the macros begin_all_references and end_all_references in c_list.c). I
> have looked up the semantics in the code of the Collection class.
>
> However, the API doesn't give only active enumerators but seemingly all that
> have existed up to this point.
>
> Compile gb.data (latest revision) like
>
> $ make clean; make "CPPFLAGS+=-DDEBUG_ENUMERATOR"
>
> and run the attached project. You'll notice the debugging output from the
> List class and one undead enumerator appearing.
>
> Is this intended behaviour (because this API is not documented, I don't know
> if it should only report active enumerators or dead ones, too, but it
> doesn't make much sense to me)? It took me some time to realise that this
> was the cause of some nasty double-frees in gb.data... I worked around this
> by explicitly marking dead enumerators as invalid and skipping them later,
> though, but maybe we could clear the situation up.
>
> Regards,
> Tobi
>

The API has been fixed in revision #5749. Stopped enumerators are not 
returned anymore.

Moreover, in revision #5750, stopped enumerators are immediately freed 
(before they were freed when the function returns or if the enumeration 
is started again).

Regards,

-- 
Benoît Minisini




More information about the Devel mailing list