From: kaazoo <ka...@ko...> - 2007-10-01 00:12:57
|
Gonzalo Garramuño wrote: > Andreas Schroeder wrote: >> >> As you can see, my mark and free functions are getting called. Sadly, it >> still seems to be leaking memory. >> >> What am I doing wrong? > > If your mark and destroy functions are being called correctly, nothing. > Either you are not destroying the objects properly or you have some > other issue. > > The question is: What do you mean by "it is leaking memory"? How are > you measuring that? > > Ruby's GC is a conservative garbage collector, so it may not always free > elements right away, as a memory address in the heap may be confused > with an actual pointer to a ruby object. > > FWIW, I'm also attaching my ruby port of drqueue which was a direct port > of the python .i file, in case you are interested. It is a tad simpler > than yours. > > Hello, I took your interface file and tried it out, but it was not able to compile. I had to change a few things and had to add 2 (optional) methods. Have a look at the attachment. I check memory usage by watching the output of top in Linux or the process viewer of OSX. When you start the following script in IRB, you should see an increasing use of memory by that Ruby process which should not happen when the variable is overwritten everytime. require 'libdrqueue' 0.upto(50) do jobs_master = Libdrqueue::request_job_list(Libdrqueue::CLIENT) GC.start end I also started with the existing interface file for Python. The Ruby extension is used for the upcoming Rails webinterface for DrQueue. Greetings, Andreas |