[Gc] Large block uncollected ?
ncannasse at motion-twin.com
Mon Aug 11 08:14:16 PDT 2008
In our multithread server, we noticed that we were having some kind of
GC'ed memory leaks. One part might be due to fragmentation but given the
amount of leaked memory, it can't be the only explanation.
I was thinking that maybe some pointers were staying on the C stack so I
tried to stop the threads after some time and start another one. It was
not very successful as well.
Actually, even after all threads were stopped, some large blocks were
still listed in the used blocks in GC_dump().
I could reproduce the problem is a standalone example :
There is a block of 2MB allocated at 0x00B90000 (+0x10 for debug infos)
using GC_MALLOC_ATOMIC. In GC_push_current_stack, the address 0x00CCCCCC
is found, which is inside the block, but should not be valid.
It turns out that in GC_mark_and_push_stack, GC_base is called, which
returns the header of 0x00B90000. Is there a way to disable this
behavior ? I don't need to GC to check for any kind of displacement.
More information about the Gc