Re: [Gc] Strange leak in simple code

Bruce Hoult <[email protected]> Wed, 15 Jul 2015 16:00:45 +1200
Newsgroups gmane.comp.programming.garbage-collection.boehmgc
Message-ID <CAMU+Ekw2OXMzOx7qOTpMxVOw=w9vQYcdTifXda2m8rzZS9MsEA@mail.gmail.com>
Ok, artificially tricky code, not what it first appears.

However, it is still true that you are linking all the nodes together, just
that you are not *explicitly* retaining a pointer to the first node.

All that is required for this to not be garbage collected is, for example:

1) the compiler to keep a copy of the pointer to the first node allocated
in a register or on the stack. Probably should not happen at -O0.

2) If *any* other value in memory looks like a pointer to one of your nodes
(not just the first one), then all nodes allocated after that one will be
retained.


On Wed, Jul 15, 2015 at 2:52 PM, Юрий Соколов <[email protected]>
wrote:

> Read the code carefully.  This code keeps pointer only to last node. So
> only two nodes are reachable at max.
> What do you mean "it leaks?"
>
> You're making a linked list, with every object pointed to either by 'last'
> or by the previous object.
>
> I would be very very unhappy if this was garbage collected!!
>
>
> On Mon, Jul 13, 2015 at 11:12 PM, Юрий Соколов <[email protected]>
> wrote:
>
>> Using libgc from Ubuntu 15.04 (7.2b-6.4) this simple code leaks:
>>
>>     #include <gc.h>
>>     struct list {
>>         struct list* next;    };
>>         int main() {
>>         GC_INIT();
>>         struct list *last = NULL;
>>         for (;;) {
>>             struct list* nuo = GC_MALLOC(sizeof(struct list));
>>             nuo->next = NULL;
>>             // if next line is commented, then no leakage
>>             if (last) last->next = nuo;
>>             last = nuo;
>>         }    }
>>
>>
>>
>> stackoverflow question
>> http://stackoverflow.com/questions/31380641/libgc-why-this-code-leaks
>>
>> --
>> This message has been scanned for viruses and
>> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and
>> is
>> believed to be clean.
>> _______________________________________________
>> bdwgc mailing list
>> [email protected]
>> https://lists.opendylan.org/mailman/listinfo/bdwgc
>>
>
>
> --
> This message has been scanned for viruses and
> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is
> believed to be clean.
>

_______________________________________________
bdwgc mailing list
[email protected]
https://lists.opendylan.org/mailman/listinfo/bdwgc