how to avoid memory leaking

Maxim Fomin maxim at maxim-fomin.ru
Mon May 13 13:47:59 PDT 2013


On Friday, 10 May 2013 at 23:18:31 UTC, maarten van damme wrote:
> I'm trying to generate images and after displaying them I want 
> to save them
> to a png file. I use parallelism to generate them 
> asynchronously with the
> gui-thread to avoid blocking (don't know if this is really 
> relevant).
>
> If I add a single line in the method where I generate the image 
> that
> creates a class which allocates a pretty big array, slowly but 
> surely the
> memory starts to rise until it ends in a spectacular out of 
> memory
> exception. I always thought the garbage collector would deal 
> with it.
>
> I tried reducing it but failed. Maybe I should let dustmite 
> bite in it a
> bit later.
> How can I manually fix this? Is this a known bug in the garbage 
> collector?
>
> btw, this code also caused segfaults on my  64 bit laptop on 
> linux.
> How can I avoid this?
>
> main class:
> https://dl.dropboxusercontent.com/u/15024434/picturegenerator/generalised.d
>
> zip file with everything ready to go to compile:
> https://dl.dropboxusercontent.com/u/15024434/picturegenerator/picturegenerator.zip

1) your code is not compilable on 64x system due to erroneous 
treating of some platform-varying types as uint, use size_t. 
Luckily dmd has -m32 switch

2) I encounter not out of memory exception but enforcement 
failure in simpledisplay.d:1024 "Maximum number of clients" which 
looks like not a memory error but you running out of some X 
server limit.

3) Segfault occures in simpledisplay.d:1058 - in destructor you 
call XDestroyImage(handle) but do not check whether handle is 
null. However it happens after enforcement failure so it doesn't 
looks like root of problem.

4) What really consumes memory is kernel or something which 
forces it to consume it since my task manager reports two blocks 
of 280 MB and 126 MB inside kernel part of virtual memory.


More information about the Digitalmars-d-learn mailing list